Unix pour vérifier si deux lignes d'un même file sont identiques?

Existe-t-il une command unix qui peut vérifier si deux lignes d'un file sont identiques?

Par exemple, considérons un file 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 

Nous voyons que la phrase

 This is sentence X 

est répété.

Y a-t-il une command qui peut détecter rapidement ceci, pour que je puisse l'exécuter comme ça –

 $ cat sentences.txt | thecommand Line 1:This is sentence X Line 4:This is sentence X 

    Voici une façon d'get le résultat exact que vous searchz:

     $ grep -nFx "$(sort sentences.txt | uniq -d)" sentences.txt 1:This is sentence X 4:This is sentence X 

    Explication:

    Le $(sort sentences.txt | uniq -d) interne $(sort sentences.txt | uniq -d) list chaque ligne qui se produit plus d'une fois. Le grep -nFx extérieur grep -nFx regarde à nouveau dans le grep -nFx pour les correspondances exactes -x à l'une de ces lignes -F et ajoute son numéro de ligne -n

    Pas exactement ce que vous voulez, mais vous pouvez essayer de combiner sort et uniq -c -d :

     aularon@aularon-laptop:~$ cat input This is sentence X This is sentence Y This is sentence Z This is sentence X This is sentence A This is sentence B aularon@aularon-laptop:~$ sort input | uniq -cd 2 This is sentence X aularon@aularon-laptop:~$ 

    2 Voici le nombre de duplications trouvées pour la ligne, de l' man uniq :

      -c, --count prefix lines by the number of occurrences -d, --repeated only print duplicate lines 

    SI le contenu du file correspond à la memory awk est bon pour cela. Le standard one-liner dans comp.lang.awk (je ne peux pas searchr une instance de cette machine mais il y en a plusieurs chaque mois) pour juste détecter qu'il y a duplication awk 'n[$0]++' qui count les occurrences de chaque ligne et imprime toutes les occurrences autres que la première, car l'action par défaut est print $0 .

    Pour afficher toutes les occurrences, y compris la première, dans votre format, mais éventuellement dans un ordre mélangé lorsque plus d'une valeur est dupliquée, devient un peu plus tatillonne:

     awk <sentences.txt ' !($0 in n) {n[$0]=NR;next} \ n[$0] {n[$0]=0; print "Line "n[$0]":"$0} \ {print "Line "NR":"$0} ' 

    Montré sur plusieurs lignes pour plus de clarté, vous courez habituellement set dans un usage réel. Si vous le faites souvent, vous pouvez mettre le script awk dans un file avec awk -f , ou bien le tout dans un script shell. Comme awk plus simple cela peut être fait de manière très similaire avec perl -n[a] .