znajdź wspólne linie między wieloma plikami

20

Mam 4 pliki, które są podobne

       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

wszystkie pliki zawierają ponad 2000 wierszy i są posortowane według pierwszej kolumny.

chcę znaleźć wspólne linie we wszystkich plikach. Próbowałem awk i grep i komunikatora, ale nie działa

użytkownik106326
źródło

Odpowiedzi:

24

Ponieważ pliki są już posortowane:

comm -12 a b |
  comm -12 - c |
  comm -12 - d
Stéphane Chazelas
źródło
3
cat a b c d |sort |uniq -c |sed -n -e 's/^ *4 \(.*\)/\1/p'
Piotr
źródło
Faktycznie, zapisz sed, to jest dość dobry na znalezienie zduplikowane wiersze w wielu plików: catdo sortcelu uniq -c. Jakoś nie do końca o tym pomyślałem, dobra odpowiedź!
smaslennikov
Możesz także użyć polecenia uniq, aby wydrukować tylko zduplikowane linie:uniq -cd
mems