Často je užitečné porovnávat verze textových souborů. Pro systémové administrátory a vývojáře softwaru je to obzvláště důležité. Správce systému může například potřebovat porovnat existující konfigurační soubor s předchozí verzí, aby diagnostikoval systémový problém. Podobně programátor často potřebuje vidět, jaké změny byly v programech provedeny v průběhu času.
The comm zobrazí porovnání dvou seřazených souborů řádek po řádku. V prvním ze tří sloupců, které zobrazuje, jsou uvedeny řádky nalezené pouze v souboru1, ve druhém sloupci jsou uvedeny řádky nalezené pouze v souboru2 a ve třetím jsou uvedeny řádky společné pro oba soubory. Základní syntaxe příkazu „comm“ je:
# comm [options] file1 file2
Hádky
Argumenty file1 a file2 jsou cesty k souborům, které comm porovnává. Použití pomlčky (–) místo souboru1 nebo souboru2 způsobí, že comm bude číst standardní vstup namísto tohoto souboru.
Možnosti
Možnosti můžete kombinovat. Bez možnosti comm vytváří výstup ve třech sloupcích.
Možnosti | Funkce |
---|---|
-1 | Nezobrazuje sloupec 1 (nezobrazuje řádky nalezené pouze v souboru 1). |
-2 | Nezobrazuje sloupec 2 (nezobrazuje řádky nalezené pouze v souboru2). |
-3 | Nezobrazuje sloupec 3 (nezobrazuje řádky nalezené v obou souborech). |
-i | Porovnávání čar bez rozlišení malých a velkých písmen. |
– -check-order | Zkontrolujte pořadí vstupu, i když jsou všechny vstupní řádky spárovatelné |
– -nocheck-order | Ignorujte pořadí vstupu |
– -output-delimiter=STR | odděluje sloupce oddělovačem „STR“ |
– -help | Zobrazí nabídku nápovědy |
– -verze | Zobrazit informace o verzi příkazu |
Příklady použití příkazu „comm“ v Linuxu
Příklad 1:Základní použití
Podívejme se na základní příklad příkazu „comm“ pro porovnání 2 seřazených souborů. Soubory jsou znázorněny níže:
# cat file1 aa bb cc dd
# cat file2 cc xx yy zz
Příkaz comm porovnává soubory řádek po řádku a vydává všechny řádky, které jsou identické. Například:
# comm file1 file2 aa bb cc dd xx yy zz
Tento výstup příkazu se zobrazí ve třech sloupcích:sloupec 1 zobrazuje řádky pouze v souboru1 (aa, bb, dd), sloupec2 zobrazuje každý řádek pouze v souboru2 (xx, yy, zz) a sloupec 3 zobrazuje každý řádek, který je stejný mezi dva soubory (cc). Toto je mnohem podrobnější srovnání než s rozdílem a výstup může být ohromující, když vše, co chcete, je najít nebo zkontrolovat jednu nebo dvě jednoduché změny. Může to však být neuvěřitelně užitečné, když žádný soubor příliš neznáte a chcete vidět, jak se porovnávají.
Příklad 2:Potlačení sloupců
comm podporuje volby ve tvaru -n, kde n je buď 1, 2 nebo 3. Při použití tyto volby určují, které sloupce se mají potlačit. Pokud bychom například chtěli vypsat pouze řádky sdílené oběma soubory, potlačili bychom výstup sloupců 1 a 2:
# comm -12 file1 file2 cc
Podobně můžete pomocí níže uvedených příkazů zobrazit pouze řádky, které jsou přítomny pouze v souboru1 a souboru2.
# comm -23 file1 file2 aa bb dd
# comm -13 file1 file2 xx yy zz
Příklad 3:Kontrola řazení na vstupu
Příkaz comm poskytuje 2 možnosti kontroly seřazených vstupů:
1. –kontrola objednávky
2. –nocheck-order
–kontrolní objednávka volba zkontroluje, zda je vstup správně seřazen před porovnáním. Pokud není vstup seřazen, zobrazí se chyba, jak je uvedeno níže:
# comm --check-order file1 file2 aa bb cc dd xx comm: file 2 is not in sorted order
Zatímco –nocheck-order volba umožňuje porovnání souborů, i když vstup není v seřazeném formátu. Například:
# cat file1 aa bb cc dd
# cat file2 xx cc yy zz
# comm --nocheck-order file1 file2 aa bb cc dd xx yy zz
Příklad 4:výstup s oddělovači
comm také poskytuje možnost oddělit výstup pomocí uživatelem zadaného oddělovače. Například místo výchozího výstupu odděleného „tabulátorem“ můžeme použít oddělovač, jako je „|“ (potrubí), jak je znázorněno v příkladu níže:
# comm --output-delimiter="|" file1 file2 aa bb ||cc dd |xx |yy |zz
rozdíl comm V/s
comm je podobný rozdíl v tom oba příkazy porovnávají dva soubory. Ale comm lze také použít jako uniq; comm vybere duplicitní nebo jedinečné řádky mezi dvěma seřazenými soubory, zatímco uniq vybere duplicitní nebo jedinečné řádky ve stejném seřazeném souboru.