Comm

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

comm je v informatice název unixové utility pro příkazový řádek, která porovnává dva soubory a vyhledává v nich stejné a rozdílné řádky. Nástroj comm je specifikován ve standardu POSIX. Je běžnou součástí unixových systémů od druhé poloviny 80. let.

Použití

Nástroj comm načítá dva soubory jako vstup. Výstup příkazu comm obsahuje tři sloupce. +more V prvních dvou sloupcích najdeme řádky, které jsou unikátní pro první a druhý soubor (v uvedeném pořadí). Třetí sloupec obsahuje řádky společné pro oba soubory. Tato funkce se podobá příkazu diff.

Sloupce běžně odděluje znak

(tabulátor). Pokud soubor obsahuje řádek, který začíná oddělovacím znakem, mohou být hranice sloupců nejasné.

Z důvodu efektivnosti očekává standardní implementace příkazu comm soubory se seřazenými řádky dle abecedního řazení. Jedním z řešení je použít příkaz sort.

Algoritmus příkazu comm využívá řadící sekvence aktuálního locale. Pokud nejsou řádky v obou souborech abecedně seřazeny podle aktuálního locale, není výsledek předem jasný.

Srovnání s diff

Podle běžných měřítek je diff mnohem silnější nástroj než comm. Jednoduchý comm se tak nejlépe hodí do skriptů. +more Hlavním rozdílem mezi comm a diff je to, že comm se zbavuje informací o pořadí řádků tříděním.

Drobný rozdíl mezi comm a diff je ten, že comm se nepokusí o indikaci toho zda se řádek mezi dvěma soubory změnil. Řádky jsou uvedeny buď v sloupci „ze souboru #1“, „ze souboru #2“ nebo „oba“. +more Takové chování může být užitečné v případně, že si přejeme, aby byly dva řádky označeny jako rozdílné, i v případě, že se liší pouze v drobnostech.

Návratový kód

Oproti diff, návratový kód příkazu comm nemá logický význam, co se týče vztahu dvou souborů. Návratová kód 0 nám říká, že vše proběhlo bez chyby. +more Návratový kód větší než 0 vyhodnocujeme jako chybu během zpracování.

Další možnosti

comm má parametry, které mohou potlačit kterýkoliv ze sloupců. Díky tomu je comm užitečný zejména ve skriptech.

Příklad

Soubor foo jablko banán lilek

Soubor bar jablko banán banán zucchini

$ comm foo bar jablko banán banán lilek zucchini

Toto nám ukazuje, že oba soubory mají jeden banán, ale jenom bar má druhý banán.

Při bližším pohledu zjistíme, že výstupní soubor má následující tvar. Povšimněte si, že sloupec reprezentuje počet tabulátorů před znaky. +more Značka \t představuje znak tabulátoru a \n zase nový řádek (notace v jazyku C). Mezery nejsou součástí výstupního souboru.

\t \t j a b l k o \n \t \t b a n á n \n \t b a n á n \n l i l e k \n \t z u c c h i n i \n

V případě, že nechceme některý ze sloupců, tak jeho pořadí uvedeme jako parametr:

$ comm -12 foo bar jablko banán

V tomto případě jsme potlačili první dva sloupce, které odpovídaly unikátním řádkům v obou souborech.

$ comm -3 foo bar banán lilek zucchini

Zde jsme zase potlačili shodné řádky obou souborů.

Související články

Seznam unixových utilit * cmp * cut

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top