GNU/Linux >> Znalost Linux >  >> Linux

Jak používat příkaz uniq ke zpracování seznamů v Linuxu

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.


Linux
  1. Jak používat příkaz sed pro Linux

  2. Jak používat Linuxový příkaz grep

  3. Jak používat příkaz historie v Linuxu

  1. Sysadmin toolbox:Jak používat příkaz sort ke zpracování textu v Linuxu

  2. Jak používat příkaz id v Linuxu

  3. Jak používat příkaz „screen“ v Linuxu

  1. Jak používat příkaz historie Linuxu

  2. Jak používat příkaz md5sum v Linuxu

  3. Jak používat příkaz xargs pro Linux