Ce face comm
Comanda comm compară rând cu rând două fișiere sortate și scrie rezultatul în trei coloane: rândurile care apar doar în primul fișier, rândurile care apar doar în al doilea și rândurile comune. Coloanele sunt separate prin tab-uri.
De obicei nu ai nevoie de toate trei coloanele, așa că le ascunzi cu -1, -2 și -3. De exemplu, comm -12 arată doar rândurile comune (intersecția), iar comm -23 doar rândurile care există numai în primul fișier (diferența).
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
-1 |
Ascunde coloana 1 (rândurile care sunt doar în primul fișier). |
-2 |
Ascunde coloana 2 (rândurile care sunt doar în al doilea fișier). |
-3 |
Ascunde coloana 3 (rândurile comune). |
--check-order |
În GNU coreutils: oprește comanda cu eroare dacă un fișier nu este sortat. |
Exemple
Exemplul 1: Elevii prezenți luni și marți
Fără opțiuni, comm afișează toate cele trei coloane: Ana a fost doar luni, Elena doar marți, Bogdan și Mihai în ambele zile.
printf 'Ana\nBogdan\nMihai\n' > luni.txt
printf 'Bogdan\nElena\nMihai\n' > marti.txt
comm luni.txt marti.txt
Rezultat
Ana
Bogdan
Elena
Mihai
Exemplul 2: Doar rândurile comune și doar diferența
-12 păstrează doar coloana 3 (prezenți în ambele zile); -23 păstrează doar coloana 1 (prezenți numai luni).
printf 'Ana\nBogdan\nMihai\n' > luni.txt
printf 'Bogdan\nElena\nMihai\n' > marti.txt
echo "În ambele zile:"
comm -12 luni.txt marti.txt
echo "Doar luni:"
comm -23 luni.txt marti.txt
Rezultat
În ambele zile:
Bogdan
Mihai
Doar luni:
Ana
Exemplul 3: Sortarea fișierelor înainte de comparare
Listele nesortate trebuie trecute prin sort. Substituția de proces <(...) din Bash evită fișierele temporare.
printf 'php\nnginx\ngit\n' > server1.txt
printf 'git\nphp\nredis\n' > server2.txt
echo "Pachete doar pe server2:"
comm -13 <(sort server1.txt) <(sort server2.txt)
Rezultat
Pachete doar pe server2:
redis
Greșeli frecvente
- Rularea pe fișiere nesortate: rezultatul este greșit fără niciun avertisment clar (GNU
commdoar avertizează că fișierul nu este sortat). Sortează întâi cusort, folosind aceeași setare de limbă (LC_ALL) pentru ambele fișiere. - Confuzia între
commșidiff:commcompară mulțimi de rânduri sortate,diffarată ce modificări transformă un fișier în celălalt, păstrând ordinea.
Comenzi înrudite
sort: Sortează liniile de text în ordine alfabetică, numerică sau după o coloană specifică.uniq: Raportează sau elimină liniile duplicate consecutive dintr-un flux de text.diff: Compară două fișiere linie cu linie și evidențiază diferențele dintre ele.paste: Lipește rândurile mai multor fișiere unul lângă altul sau unește toate rândurile unui fișier într-unul singur.