trouver des lignes communes entre plusieurs fichiers

20

j'ai 4 fichiers qui sont comme

       file A
       >TCONS_00000867
       >TCONS_00001442
       >TCONS_00001447
       >TCONS_00001528
       >TCONS_00001529
       >TCONS_00001668
       >TCONS_00001921

       file b
       >TCONS_00001528
       >TCONS_00001529
       >TCONS_00001668
       >TCONS_00001921
       >TCONS_00001922
       >TCONS_00001924

       file c
       >TCONS_00001529
       >TCONS_00001668
       >TCONS_00001921
       >TCONS_00001922
       >TCONS_00001924
       >TCONS_00001956
       >TCONS_00002048

       file d
       >TCONS_00001922
       >TCONS_00001924
       >TCONS_00001956
       >TCONS_00002048

tous les fichiers contiennent plus de 2000 lignes et triés pour la première colonne.

je veux trouver des lignes communes dans tous les fichiers. j'ai essayé awk et grep et comm mais ne fonctionne pas

user106326
la source

Réponses:

24

Les fichiers étant déjà triés:

comm -12 a b |
  comm -12 - c |
  comm -12 - d
Stéphane Chazelas
la source
3
cat a b c d |sort |uniq -c |sed -n -e 's/^ *4 \(.*\)/\1/p'
Piotr
la source
En fait, l'économie sed, ce qui est très bon pour trouver des lignes en double dans de nombreux fichiers: catà sortla uniq -c. D'une certaine manière, je n'y ai pas vraiment pensé, bonne réponse!
smaslennikov
Vous pouvez également utiliser la commande uniq pour imprimer uniquement les lignes dupliquées:uniq -cd
mems