Jak používat příkaz uniq v systému Linux

Příkaz uniq pro Linux prochází vaše textové soubory a hledá jedinečné nebo duplicitní řádky. V této příručce se zabýváme její všestranností a funkcemi a také tím, jak můžete tuto šikovnou pomůcku využít na maximum.

Hledání odpovídajících řádků textu v systému Linux

Příkaz uniq je rychlé, flexibilní a skvělé v tom, co dělá. Stejně jako mnoho příkazů Linuxu má však několik zvláštností – což je v pořádku, pokud o nich víte. Pokud se do toho pustíte bez sebemenšího zasvěceného know-how, můžete se klidně nechat poškrábat na hlavě nad výsledky. Na tyto zvláštnosti vám ukážeme za pochodu.

Příkaz uniq je perfektní pro ty, kteří jsou cílevědomí a jsou navrženi tak, aby dělali jednu věc a dělali to dobře. To je důvod, proč je také zvláště vhodný pro práci s rourami a hraje svou roli v příkazových rourách. Jeden z nich nejčastějšími spolupracovníky je sort, protože uniq musí mít seřazený vstup, na kterém může pracovat.

Pojďme to rozpálit!

Spuštění uniq bez možnosti

Máme textový soubor, který obsahuje texty k Roberta Johnsona píseň Věřím, že opráším své koště. Pojďme se podívat, co z toho dělá uniq.

Napíšeme následující, abychom výstup převedli do méně:

uniq dust-my-broom.txt | less

The

Získáme celou skladbu, včetně duplicitních řádků, za méně:

Výstup z

Nezdá se, že by to byly jedinečné řádky, ani duplicitní řádky.

Správně – protože tohle je první vtip. Pokud spustíte uniq bez voleb, chová se, jako byste použili volbu -u (unikátní řádky). To říká uniq, aby vytiskl pouze jedinečné řádky ze souboru. Důvod, proč vidíte duplicitní řádky, je ten, že má-li uniq považovat řádek za duplikát, musí sousedit s jeho duplikátem, což je místo řazení.

  Jak získat přístup k jednotce pCloud v systému Linux

Když soubor třídíme, seskupuje duplicitní řádky a uniq s nimi zachází jako s duplikáty. Použijeme řazení na soubor, seřazený výstup převedeme do uniq a potom konečný výstup převedeme do méně.

Za tímto účelem zadáme následující:

sort dust-my-broom.txt | uniq | less

The

Seřazený seznam řádků se zobrazí méně.

Věta „Věřím, že opráším své koště“ se v písni určitě objeví víckrát. Ve skutečnosti se to opakuje dvakrát v prvních čtyřech řádcích písně.

Proč se tedy zobrazuje v seznamu jedinečných řádků? Protože když se v souboru poprvé objeví řádek, je jedinečný; pouze následující položky jsou duplikáty. Můžete si to představit jako výpis prvního výskytu každého jedinečného řádku.

Opět použijeme řazení a přesměrujeme výstup do nového souboru. Tímto způsobem nemusíme používat řazení v každém příkazu.

Zadáme následující příkaz:

sort dust-my-broom.txt > sorted.txt

The sort.txt” v okně terminálu.‘ width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

Nyní máme předřazený soubor, se kterým můžeme pracovat.

Počítání duplikátů

Pomocí volby -c (count) můžete vytisknout, kolikrát se každý řádek objeví v souboru.

Zadejte následující příkaz:

uniq -c sorted.txt | less

The

Každý řádek začíná počtem zobrazení daného řádku v souboru. Všimnete si však, že první řádek je prázdný. To vám říká, že v souboru je pět prázdných řádků.

Výstup z

Pokud chcete výstup seřadit v číselném pořadí, můžete výstup z uniq vložit do řazení. V našem příkladu použijeme volby -r (reverzní) a -n (numerické řazení) a výsledky převedeme do méně.

Zadáme následující:

uniq -c sorted.txt | sort -rn | less

The

Seznam je řazen sestupně na základě četnosti výskytu každého řádku.

Výpis pouze duplicitních řádků

Pokud chcete vidět pouze řádky, které se v souboru opakují, můžete použít volbu -d (opakované). Bez ohledu na to, kolikrát je řádek v souboru duplikován, je uveden pouze jednou.

  Jak blokovat reklamy pomocí nástroje Pi-Hole Linux Tool

Chcete-li použít tuto možnost, zadejte následující:

uniq -d sorted.txt

The

Duplicitní řádky jsou uvedeny pro nás. Nahoře si všimnete prázdného řádku, což znamená, že soubor obsahuje duplicitní prázdné řádky – není to místo, které uniq nechalo kosmeticky vyrovnat výpis.

Výstup z

Můžeme také zkombinovat volby -d (opakované) a -c (počet) a propojit výstup pomocí řazení. To nám dává seřazený seznam řádků, které se objevují alespoň dvakrát.

Chcete-li použít tuto možnost, zadejte následující:

uniq -d -c sorted.txt | sort -rn

The

Výpis všech duplicitních řádků

Pokud chcete vidět seznam všech duplicitních řádků a také záznam pro každé zobrazení řádku v souboru, můžete použít volbu -D (všechny duplicitní řádky).

Chcete-li použít tuto možnost, zadejte následující:

uniq -D sorted.txt | less

The

Výpis obsahuje záznam pro každý duplikovaný řádek.

Pokud použijete volbu –group, vytiskne každý duplikovaný řádek s prázdným řádkem buď před (prepend) nebo za každou skupinou (append), nebo před a za (obojí) každou skupinou.

Jako náš modifikátor používáme append, takže zadáme následující:

uniq --group=append sorted.txt | less

The

Skupiny jsou odděleny prázdnými řádky, aby byly lépe čitelné.

Výstup z

Kontrola určitého počtu znaků

Ve výchozím nastavení uniq kontroluje celou délku každého řádku. Pokud však chcete omezit kontroly na určitý počet znaků, můžete použít volbu -w (kontrolní znaky).

V tomto příkladu zopakujeme poslední příkaz, ale omezíme srovnání na první tři znaky. Chcete-li to provést, zadejte následující příkaz:

uniq -w 3 --group=append sorted.txt | less

The

Výsledky a seskupení, která dostáváme, jsou zcela odlišné.

Výstup z

Všechny řádky začínající na „I b“ jsou seskupeny, protože tyto části řádků jsou identické, takže jsou považovány za duplikáty.

Stejně tak všechny řádky začínající „já jsem“ jsou považovány za duplikáty, i když je zbytek textu odlišný.

Ignorování určitého počtu znaků

V některých případech může být užitečné přeskočit určitý počet znaků na začátku každého řádku, například když jsou řádky v souboru číslovány. Nebo řekněme, že potřebujete uniq, abyste přeskočili časové razítko a začali kontrolovat řádky od znaku šest místo od prvního znaku.

  Jak nainstalovat Funtoo Linux

Níže je verze našeho tříděného souboru s očíslovanými řádky.

Pokud chceme, aby uniq začal své porovnávací kontroly na znaku tři, můžeme použít volbu -s (přeskočit znaky) zadáním následujícího:

uniq -s 3 -d -c numbered.txt

The

Čáry jsou detekovány jako duplikáty a správně počítány. Všimněte si, že zobrazená čísla řádků jsou čísla prvního výskytu každého duplikátu.

Místo znaků můžete také přeskočit pole (řadu znaků a nějaké mezery). Použijeme volbu -f (pole), abychom řekli uniq, která pole má ignorovat.

Zadáme následující, abychom řekli uniq, aby ignoroval první pole:

uniq -f 1 -d -c  numbered.txt

The

Dostaneme stejné výsledky, jako když jsme řekli uniq, aby vynechal tři znaky na začátku každého řádku.

Ignorování případu

Ve výchozím nastavení uniq rozlišuje malá a velká písmena. Pokud se stejné písmeno zobrazí jako velké a malé, společnost uniq považuje řádky za odlišné.

Podívejte se například na výstup z následujícího příkazu:

uniq -d -c sorted.txt | sort -rn

The

Řádky „Věřím, že opráším své koště“ a „Věřím, že opráším své koště“ se nepovažují za duplikáty, protože se liší velikost písmen na „B“ v „věřím“.

Pokud však zahrneme volbu -i (ignorovat malá a velká písmena), tyto řádky budou považovány za duplikáty. Zadáme následující:

uniq -d -c -i sorted.txt | sort -rn

The

Řádky jsou nyní považovány za duplikáty a jsou seskupeny.

Linux vám dává k dispozici velké množství speciálních nástrojů. Jako mnoho z nich, ani uniq není nástroj, který budete používat každý den.

To je důvod, proč velkou součástí zvládnutí Linuxu je zapamatovat si, který nástroj vyřeší váš aktuální problém a kde jej můžete znovu najít. Pokud však budete cvičit, budete na dobré cestě.

Nebo můžete vždy jen hledat How-To Geek – pravděpodobně o tom máme článek.