Pokud pracujete převážně na příkazovém řádku a každý den pracujete s velkým množstvím textových souborů, měli byste vědět o Uniq příkaz.
Příkaz Uniq vám pomůže snadno najít opakované a duplicitní řádky ze souboru. Uniq neslouží pouze k hledání duplikátů, ale také k jejich odstranění, zobrazení počtu výskytů duplicitních řádků, zobrazení pouze opakovaných řádků a zobrazení pouze jedinečných řádků atd.
Vezměte prosím na vědomí, že příkaz 'uniq' nezjistí opakované řádky, pokud nejsou vedle sebe. Možná je tedy budete muset nejprve seřadit nebo zkombinovat příkaz sort s uniq, abyste získali výsledky. Dovolte mi, abych vám ukázal několik příkladů.
Protože příkaz uniq je součástí balíčku GNU coreutils, je ve většině distribucí Linuxu předinstalovaný. Nezatěžujme se tedy instalací a podívejme se na praktické příklady příkazů Uniq.
Příklady příkazů Uniq
Nejprve vytvořte soubor s několika duplicitními řádky.
$ vi ostechnix.txt
welcome to ostechnix welcome to ostechnix Linus is the creator of Linux. Linux is secure by default Linus is the creator of Linux. Top 500 super computers are powered by Linux
Jak vidíte ve výše uvedeném souboru, máme několik opakovaných řádků (první, druhý, třetí a pátý řádek jsou duplikáty).
1. Odstraňte po sobě jdoucí duplicitní řádky v souboru pomocí příkazu Uniq
Pokud použijete příkaz 'uniq' bez jakýchkoli argumentů, odstraní všechny po sobě jdoucí duplicitní řádky a zobrazí pouze jedinečné řádky.
$ uniq ostechnix.txt
Ukázkový výstup:
Jak můžete vidět, příkaz uniq odstranil všechny po sobě jdoucí duplicitní řádky v daném souboru. Možná jste si také všimli, že výše uvedený výstup má stále duplikáty na druhém a čtvrtém řádku. Je to proto, že příkaz uniq vynechá opakované řádky pouze v případě, že sousedí. Můžeme samozřejmě odstranit i ty nenásledující duplikáty. Podívejte se na druhý příklad níže.
2. Odstraňte všechny duplicitní řádky
$ sort ostechnix.txt | uniq
Ukázkový výstup:
Vidět? Nejsou zde žádné duplikáty ani opakované řádky. Jinými slovy, výše uvedený příkaz zobrazí každý řádek ze souboru ostechnix.txt
jednou .
Ve výše uvedeném příkladu jsme použili příkaz sort ve spojení s uniq, protože, jak jsem již zmínil, uniq nenajde duplicitní/opakované řádky, pokud nejsou vedle sebe.
3. Zobrazit pouze jedinečné řádky ze souboru
Chcete-li zobrazit pouze jedinečné řádky ze souboru, příkaz by byl:
$ sort ostechnix.txt | uniq -u
Ukázkový výstup:
Linux is secure by default Top 500 super computers are powered by Linux
Jak vidíte, v daném souboru máme pouze dva jedinečné řádky.
4. Zobrazit pouze duplicitní řádky
Podobně můžeme také zobrazit duplicitní řádky ze souboru jako níže.
$ sort ostechnix.txt | uniq -d
Ukázkový výstup:
Linus is the creator of Linux. welcome to ostechnix
Tyto dva jsou opakované/duplikované řádky v souboru ostechnix.txt. Vezměte prosím na vědomí, že -d
(malé písmeno d) vytiskne pouze duplicitní řádky , jeden pro každou skupinu . Chcete-li vytisknout všechny duplicitní řádky , použijte -D
(velké d) jako níže.
$ sort ostechnix.txt | uniq -D
Podívejte se na rozdíl mezi oběma příznaky na níže uvedeném snímku obrazovky.
5. Zobrazení počtu výskytů každého řádku v souboru
Z nějakého důvodu možná budete chtít zkontrolovat, kolikrát se řádek v daném souboru opakuje. Chcete-li to provést, použijte -c
příznak jako níže.
$ sort ostechnix.txt | uniq -c
Ukázkový výstup:
2 Linus is the creator of Linux. 1 Linux is secure by default 1 Top 500 super computers are powered by Linux 2 welcome to ostechnix
Můžeme také zobrazit počet výskytů každého řádku spolu s tímto řádkem, seřazený podle nejčastějšího pomocí příkazu:
$ sort ostechnix.txt | uniq -c | sort -nr
Ukázkový výstup:
2 welcome to ostechnix 2 Linus is the creator of Linux. 1 Top 500 super computers are powered by Linux 1 Linux is secure by default
6. Omezte srovnání na 'N' znaků
Příkaz Uniq nám umožňuje omezit porovnání na určitý počet znaků řádků v souboru pomocí -w
vlajka. Například omezme srovnání na první 4 znaky řádků v souboru a zobrazme opakované řádky, jak je uvedeno níže.
$ uniq -d -w 4 ostechnix.txt
7. Vyhněte se porovnávání s prvními 'N' znaky
Stejně jako limitní srovnání s N znaky řádků v souboru se můžeme také vyhnout porovnání prvních N znaků pomocí -s
vlajka.
Následující příkaz zabrání porovnání s prvními 4 znaky řádků v souboru:
$ uniq -d -s 4 ostechnix.txt
Abyste se vyhnuli porovnávání prvních N polí místo znaků, použijte ve výše uvedeném příkazu příznak '-f'.
Další podrobnosti naleznete v části nápovědy;
$ uniq --help
a manuálové stránky.
$ man uniq
Přečtěte si také:
- Výukový program pro skládání s příklady pro začátečníky