J'ai un fichier texte contenant des lignes comme celle-ci:
This is a thread 139737522087680
This is a thread 139737513694976
This is a thread 139737505302272
This is a thread 139737312270080
.
.
.
This is a thread 139737203164928
This is a thread 139737194772224
This is a thread 139737186379520
Comment puis-je être sûr de l'unicité de chaque ligne?
REMARQUE: le but est de tester le fichier et non de le modifier si des lignes en double sont présentes.
Réponses:
la source
uniq
au lieu desort -u
uniq
serait une grosse erreur; il déduplique uniquement les lignes adjacentes!sort <file> | uniq -d
imprimerait les doublons.Solution awk:
la source
echo
dansEND
?&& echo
ou|| echo
est une convention dans les réponses pour indiquer qu'une commande fait la bonne chose avec le code d'état de sortie. L'important est leexit(1)
. Idéalement, vous utiliseriez cela commeif has_only_unique_lines file; then ...
, nonif [[ $(has_only_unique_lines file) = "no dupes" ]]; then ...
, ce serait idiot.sort
volonté aussi, qu'il y ait ou non des dupes, n'est-ce pas? Comment est-ce que cela économise de la mémoire?Utilisation de
sort
/uniq
:Pour vérifier uniquement les lignes en double, utilisez l'
-d
option pour uniq. Cela ne montrera que les lignes qui sont en double, sinon aucune ne montrera rien:la source
TLDR
La question initiale n'était pas claire et indiquait que le PO voulait simplement une version unique du contenu d'un fichier. C'est indiqué ci-dessous. Dans la forme mise à jour de la question depuis, le PO déclare maintenant qu'il / elle veut simplement savoir si le contenu du fichier est unique ou non.
Tester si le contenu du fichier est unique ou non
Vous pouvez simplement utiliser
sort
pour vérifier si un fichier est unique ou contient des doublons comme ceci:Exemple
Disons que j'ai ces deux fichiers:
fichier d'exemple en double fichier d'exemple uniqueMaintenant, lorsque nous analysons ces fichiers, nous pouvons dire s'ils sont uniques ou contiennent des doublons:
tester le fichier de doublons tester un fichier uniqueQuestion d'origine (contenu unique du fichier)
Peut être fait avec juste
sort
:la source
J'utilise généralement
sort
le fichier, puis j'utiliseuniq
pour compter le nombre de doublons, puis jesort
revois les doublons en bas de la liste.J'ai ajouté un double aux exemples que vous avez fournis:
Comme je n'ai pas lu la page de manuel depuis
uniq
un moment, j'ai jeté un coup d'œil à toutes les alternatives. Ce qui suit élimine le besoin du deuxième tri, si vous voulez juste voir les doublons:la source
S'il n'y a pas de doublons, toutes les lignes sont uniques:
Description: Triez les lignes du fichier pour rendre les lignes répétées consécutives (tri)
Extrayez toutes les lignes consécutives qui sont égales (uniq -d).
S'il y a une sortie de la commande ci-dessus (
[...]
), (&&
) imprime un message.la source
Cela ne serait pas complet sans une réponse Perl!
Cela imprimera une fois chaque ligne non unique: donc s'il n'imprime rien, alors le fichier a toutes les lignes uniques.
la source
Utilisation
cmp
etsort
dansbash
:ou
Cela trierait cependant le fichier deux fois, tout comme la réponse acceptée.
la source