Příkaz sort jsme viděli v našem předchozím článku, ale třídění jakéhokoli souboru často povede k mnoha duplicitním řádkům vedle sebe. Je příliš obtížné správně zobrazit tyto řádky.
V tomto scénáři uniq
vám pomůže vytisknout duplicitní řádky jednou ve výstupu. Ve skutečnosti zahodí řádky, které se opakují, a vytiskne první sousední opakovaný řádek, což nám umožňuje správně zobrazit výstup.
Řádky použité ve vstupním souboru pro uniq
příkaz nesmí přesáhnout délku 2048 bajtů (včetně znaků nového řádku) ani obsahovat prázdné znaky.
Syntaxe
uniq [OPTION]... [INPUT [OUTPUT]]
Příklady
Níže je uvedena řada příkladů, které začínají bez možnosti. Projdeme si několik případů použití. Některé zahrnují pouze uniq
a další spoléhají na další příkazy.
Bez možnosti
Níže je soubor s názvem soubor2 , který obsahuje některá data. Všimněte si, že tento soubor není seřazený a duplicitní řádky spolu nesousedí. Před použitím uniq
příkaz s tímto souborem, měli bychom sort
to. V příkladu jsem vyzkoušel uniq
příkaz s původním souborem, ale vytiskne pouze výstup takový, jaký je, podobně jako cat
výstup. V dalším příkladu vezmeme výstup z sort
příkaz a potrubím s uniq
příkaz. To nám pomáhá pochopit chování uniq
příkaz:
$ cat file2
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
$ uniq file2
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
Dr.B.R.Ambedkar
Budhha
$ sort file2
Budhha
Budhha
Budhha
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
$ sort file2 | uniq
Budhha
ChhatrapatiShahuMaharaj
Dr.B.R.Ambedkar
S volbou -c, --count
Níže v dalším příkladu používáme -c
možnost počítat opakující se řádky. uniq
příkaz vypíše, které se počítá jako předpona řádku. Níže uvedený příklad nám říká, že první řádek se opakuje třikrát, druhý řádek jednou a třetí řádek třikrát:
$ sort file2 | uniq -c
3 Budhha
1 ChhatrapatiShahuMaharaj
3 Dr.B.R.Ambedkar
S volbou -d, --repeated
-d
volba vytiskne pouze řádky, které se opakují. Zahodí neduplicitní řádky. Proto řádek ChhatrapatiShahuMaharaj byl v níže uvedeném příkladu vyřazen:
$ sort file2 | uniq -d
Budhha
Dr.B.R.Ambedkar
V níže uvedeném příkladu jsem použil -c
možnost pro křížovou kontrolu, zda -d
volba je pouze tisk opakujících se řádků nebo ne:
$ sort file2 | uniq -cd
3 Budhha
3 Dr.B.R.Ambedkar
S volbou -D, --all-repeated
-D
volba vytiskne opakované řádky a zahodí neduplikované řádky. V níže uvedeném příkladu uniq
příkaz vytiskne pouze všechny duplicitní řádky a zahodí neduplicitní řádky:
$ sort file2 | uniq -D
Budhha
Budhha
Budhha
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
S volbou -u, --unique
Opakem výše uvedené možnosti je -u
volba vytiskne jedinečné řádky, tj. neduplikované řádky. Proto v níže uvedeném příkladu vytiskne ChhatrapatiShahuMaharaj jako výstup:
$ sort file2 | uniq -u
ChhatrapatiShahuMaharaj
S volbou -i, --ignore-case
Pomocí -i
můžeme ignorovat rozlišení znaků. Níže uvádím výstup uniq
příkaz s a bez -i
možnost srovnání:
$ cat file3
aaaa
aaaa
AAAA
AAAA
bbbb
BBBB
$ uniq file3
aaaa
AAAA
bbbb
BBBB
$ uniq -i file3
aaaa
bbbb
S -f, --skip-fields=N
Někdy musíme některá pole přeskočit, abychom mohli filtrovat duplicitní řádky. To je možné pomocí -f
volba. V následujícím příkladu přeskočíme první pole (první sloupec), abychom porovnali duplicitní řádky z druhého pole. Uvedl jsem oba příklady, s -f
i bez něj pro lepší pochopení chování opce:
$ cat file5
Amit aaaa
Ajit aaaa
Advi bbbb
Kaju bbbb
$ uniq file5
Amit aaaa
Ajit aaaa
Advi bbbb
Kaju bbbb
$ uniq -f 1 file5
Amit aaaa
Advi bbbb
[ Čtenářům se také líbilo:Práce s rourami na příkazovém řádku Linuxu ]
S volbou -s, --skip-char=N
Stejně jako pole můžeme také přeskakovat znaky pomocí -s
volba. Mějte prosím na paměti, že uniq
příkaz vytiskne pouze první duplicitní řádek a zahodí další duplicitní řádky. Proto 33aa a 55bb byly vyřazeny. Zde je příklad:
$ cat file4
22aa
33aa
44bb
55bb
$ uniq file4
22aa
33aa
44bb
55bb
$ uniq -s 2 file4
22aa
44bb
S volbou -w, --check-chars=N
Stejně jako přeskakování znaků můžeme znaky zvážit také pomocí -w
možnost, jako v příkladu:
$ cat file6
aa12
aa34
bb56
bb78
$ uniq file6
aa12
aa34
bb56
bb78
$ uniq -w 2 file6
aa12
bb56
S volbou --version
Použijte --version
možnost zkontrolovat verzi uniq
příkaz.
$ uniq --version
uniq (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Richard M. Stallman and David MacKenzie.
[ Zdarma ke stažení:Cheat sheet pro pokročilé příkazy Linuxu. ]
Zabalit
uniq
nedetekuje opakované čáry, pokud nejsou přilehlé. uniq
příkaz umí spočítat a vytisknout počet opakujících se řádků. Stejně jako duplicitní řádky můžeme také filtrovat jedinečné řádky (neduplicitní řádky) a také můžeme ignorovat rozlišování velkých a malých písmen. Před porovnáním duplicitních řádků můžeme přeskočit pole a znaky a také zvážit znaky pro filtrování řádků.
Po kontrole více uniq
možnosti příkazů, rád bych se podělil o malý obrázek, který si s vámi ponechám pro referenci.
