Abbiamo visto il comando di ordinamento nel nostro articolo precedente, ma l'ordinamento di qualsiasi file spesso risulterà in molte righe duplicate adiacenti l'una all'altra. Diventa troppo difficile visualizzare correttamente quelle righe.
In questo scenario, uniq
comando ti aiuta a stampare righe duplicate una volta nell'output. Elimina effettivamente le righe ripetute e stampa la prima riga ripetuta adiacente, il che ci consente di visualizzare correttamente l'output.
Le righe utilizzate nel file di input per uniq
il comando non può superare i 2048 byte di lunghezza (inclusi eventuali caratteri di nuova riga) né contenere caratteri nulli.
Sintassi
uniq [OPTION]... [INPUT [OUTPUT]]
Esempi
Di seguito sono riportati una serie di esempi, che iniziano senza opzioni. Esamineremo diversi casi d'uso. Alcuni riguardano solo uniq
e altri si basano su comandi aggiuntivi.
Senza alcuna opzione
Di seguito è riportato un file denominato file2 , che contiene alcuni dati. Si noti che questo file non è ordinato e le righe duplicate non sono adiacenti l'una all'altra. Prima di utilizzare uniq
comando con questo file, dovremmo sort
esso. Nell'esempio, ho provato uniq
comando con il file originale, ma stampa solo l'output così com'è, proprio come un cat
produzione. Nel prossimo esempio, prendiamo l'output da un sort
comando e pipe con uniq
comando. Questo ci aiuta a capire il comportamento di uniq
comando:
$ 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
Con -c, opzione --count
Di seguito, nel prossimo esempio, stiamo usando il -c
opzione per contare le righe ripetute. Il uniq
comando stampa che conta come prefisso con la riga. L'esempio seguente ci dice che la prima riga viene ripetuta tre volte, la seconda riga una volta e la terza riga tre volte:
$ sort file2 | uniq -c
3 Budhha
1 ChhatrapatiShahuMaharaj
3 Dr.B.R.Ambedkar
Con -d, opzione --repeated
Il -d
l'opzione stampa solo le righe ripetute. Elimina le righe non duplicate. Pertanto, riga ChhatrapatiShahuMaharaj è stato scartato nell'esempio seguente:
$ sort file2 | uniq -d
Budhha
Dr.B.R.Ambedkar
Nell'esempio seguente, ho usato -c
opzione per verificare se il -d
l'opzione sta stampando solo le righe ripetute o meno:
$ sort file2 | uniq -cd
3 Budhha
3 Dr.B.R.Ambedkar
Con -D, opzione --all-repeated
Il -D
l'opzione stampa righe ripetute e scarta le righe non duplicate. Nell'esempio seguente, uniq
il comando stampa solo tutte le righe duplicate e scarta le righe non duplicate:
$ sort file2 | uniq -D
Budhha
Budhha
Budhha
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Dr.B.R.Ambedkar
Con -u, --unique opzione
Di fronte all'opzione sopra, il -u
l'opzione stampa righe univoche, ovvero righe non duplicate. Pertanto, nell'esempio seguente, stampa ChhatrapatiShahuMaharaj come output:
$ sort file2 | uniq -u
ChhatrapatiShahuMaharaj
Con l'opzione -i, --ignore-case
Usando il -i
opzione, possiamo ignorare la distinzione tra maiuscole e minuscole dei caratteri. Di seguito ho fornito un output di uniq
comando con e senza -i
opzione per confrontare:
$ cat file3
aaaa
aaaa
AAAA
AAAA
bbbb
BBBB
$ uniq file3
aaaa
AAAA
bbbb
BBBB
$ uniq -i file3
aaaa
bbbb
Con -f, --skip-fields=N
A volte abbiamo bisogno di saltare alcuni campi per filtrare le righe duplicate. Questo è possibile usando il -f
opzione. Nell'esempio seguente, saltiamo il primo campo (prima colonna) per confrontare le righe duplicate del secondo campo. Ho fornito entrambi gli esempi, con e senza -f
opzione, per una migliore comprensione del comportamento dell'opzione:
$ 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
[ Ai lettori è piaciuto anche:Lavorare con pipe sulla riga di comando di Linux ]
Con -s, opzione --skip-char=N
Proprio come il campo, possiamo anche saltare i caratteri usando -s
opzione. Tieni presente che uniq
comando stampa solo la prima riga duplicata e scarta le altre righe duplicate. Pertanto 33aa e 55bb sono stati scartati. Ecco l'esempio:
$ cat file4
22aa
33aa
44bb
55bb
$ uniq file4
22aa
33aa
44bb
55bb
$ uniq -s 2 file4
22aa
44bb
Con -w, --check-chars=N opzione
Proprio come saltare i caratteri, possiamo considerare anche i caratteri usando il -w
opzione, come nell'esempio:
$ cat file6
aa12
aa34
bb56
bb78
$ uniq file6
aa12
aa34
bb56
bb78
$ uniq -w 2 file6
aa12
bb56
Con l'opzione --version
Usa il --version
opzione per verificare la versione di uniq
comando.
$ 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.
[ Download gratuito:cheat sheet dei comandi avanzati di Linux. ]
Concludi
uniq
non rileva le linee ripetute a meno che non siano adiacenti. Il uniq
il comando può contare e stampare il numero di righe ripetute. Proprio come le righe duplicate, possiamo anche filtrare le righe univoche (linee non duplicate) e ignorare la distinzione tra maiuscole e minuscole. Possiamo saltare campi e caratteri prima di confrontare le righe duplicate e considerare anche i caratteri per filtrare le righe.
Dopo aver esaminato il multiplo uniq
opzioni di comando, vorrei condividere una piccola immagine per tenerla con te come riferimento.