Existe-t-il une commande Unix qui peut vérifier si deux lignes d'un fichier sont identiques?
Par exemple, considérez un fichier sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
On voit que la phrase
This is sentence X
est répété.
Y a-t-il une commande qui peut rapidement détecter cela, afin que je puisse peut-être l'exécuter comme ça -
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
text-processing
search
Code bleu
la source
la source
sort sentences.txt | uniq -d | grep -nFxf - sentences.txt
serait un peu plus efficace et éviterait desarg list too long
problèmes potentiels .Pas exactement ce que vous voulez, mais vous pouvez essayer de combiner
sort
etuniq -c -d
:2
voici le nombre de doublons trouvés pour la ligne, à partir deman uniq
:la source
SI le contenu du fichier
awk
tient en mémoire est bon pour cela. Le one-liner standard dans comp.lang.awk (je ne peux pas rechercher une instance de cette machine mais il y en a plusieurs chaque mois) pour simplement détecter qu'il y a duplication est celuiawk 'n[$0]++'
qui compte les occurrences de chaque valeur de ligne et imprime toute occurrence (s) autre que le premier, car l'action par défaut estprint $0
.Pour afficher toutes les occurrences, y compris la première, dans votre format, mais éventuellement dans un ordre mixte lorsque plusieurs valeurs sont dupliquées, devient un peu plus difficile:
Montré sur plusieurs lignes pour plus de clarté, vous exécutez généralement ensemble en utilisation réelle. Si vous faites cela souvent, vous pouvez mettre le
awk
script dans un fichier avecawk -f
, ou bien sûr le tout dans un script shell. Comme la plupart des choses simples,awk
cela peut être fait de manière très similaire avecperl -n[a]
.la source