Come usare il comando uniq in Linux

Contenuti

Un prompt della shell su un computer Linux.

El Linux uniq comando scorre i file di testo per righe singole o duplicate. In questa guida, ne copriamo la versatilità e le caratteristiche, oltre a come ottenere il massimo da questa ingegnosa utility.

Trova le righe di testo corrispondenti in Linux

il uniq il comando è Presto, flessibile ed eccellente in quello che fa. tuttavia, come molti comandi di Linux, ha delle particolarità, quale è giusto, basta che li conosci. Se fai il grande passo senza un po' di conoscenza interna, potresti essere lasciato a grattarti la testa per i risultati. Indicheremo queste stranezze man mano che andiamo avanti.

il uniq Il comando è perfetto per chi è nel campo monouso, progettato per fare una cosa e farla bene. Per questo è particolarmente adatto anche per lavorare con le pipe e svolgere il suo ruolo nelle pipe di comando. Uno dei suoi collaboratori più assidui è sort perché uniq deve avere una voce ordinata su cui lavorare.

Accendiamolo!

IMPARENTATO: Come usare Pipes su Linux

Esecuzione di uniq senza opzioni

Abbiamo un file di testo che contiene i testi di De Robert Johnson canzone Penso che spolvererò la mia scopa. Vediamo cosa uniq la fa.

Scriveremo quanto segue per reindirizzare l'output a less:

uniq dust-my-broom.txt | meno

Otteniamo la canzone completa, comprese le linee duplicate, Su less:

Sembra che non siano né le linee uniche né le linee duplicate.

Corretta, perchè questa è la prima particolarità. Se corri uniq nessuna opzione, si comporta come se avesse usato il -u opzione (linee uniche). Questo dice uniq per stampare solo le singole righe del file. Il motivo per cui vedi linee duplicate è perché, di uniq considerare una linea un duplicato, deve essere adiacente al suo duplicato, cos'è dove? sort entra.

Quando ordiniamo il file, raggruppa le linee duplicate e uniq li tratta come duplicati. noi useremo sort nel file, imbuto di output ordinato a uniqe quindi convogliare l'output finale a less.

Per farlo, scriviamo quanto segue:

sort dust-my-broom.txt | unico | meno

Viene visualizzato un elenco ordinato di righe in less.

La linea, “Penso che lo rispolvererò dalla mia scopa”, appare sicuramente nella canzone più di una volta. Infatti, si ripete due volte nelle prime quattro righe della canzone.

Quindi, Perché appare in un elenco di linee uniche? Perché la prima volta che appare una riga nel file, è unico; solo le voci successive sono duplicati. Puoi pensarlo come un elenco della prima occorrenza di ogni riga univoca.

Usiamo sort di nuovo e reindirizzare l'output in un nuovo file. In questo modo, non dobbiamo usare sort in ogni comando.

Scriviamo il seguente comando:

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

Ora, abbiamo un file pre-classificato con cui lavorare.

Conteggio dei duplicati

Puoi usare il -c (contare) per stampare il numero di volte che ogni riga appare in un file.

Digita il seguente comando:

uniq -c sorted.txt | meno

Ogni riga inizia con il numero di volte in cui quella riga appare nel file. tuttavia, noterai che la prima riga è vuota. Questo ti dice che ci sono cinque righe vuote nel file.

Se vuoi che l'output sia ordinato in ordine numerico, può alimentare l'uscita da uniq entro sort. Nel nostro esempio, useremo il -r (invertire) e -n (ordinamento numerico) e incanalare i risultati in less.

Scriviamo quanto segue:

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

L'elenco è organizzato in ordine decrescente in base alla frequenza di apparizione di ciascuna riga.

Elencare solo righe duplicate

Se vuoi vedere solo le righe ripetute in un file, puoi usare il -d opzione (ripetuto). Non importa quante volte una riga viene duplicata in un file, appare solo una volta.

Per usare questa opzione, scriviamo quanto segue:

uniq -d sorted.txt

Le linee duplicate sono elencate per noi. Noterai la riga vuota in alto, il che significa che il file contiene righe vuote duplicate; non è uno spazio lasciato da uniq per compensare esteticamente l'elenco.

Possiamo anche combinare i -d (ripetuto) e -c (raccontare) opzioni e convogliare l'output attraverso sort. Questo ci dà un elenco ordinato di righe che appaiono almeno due volte.

Digita quanto segue per utilizzare questa opzione:

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

Elenco di tutte le linee duplicate

Se vuoi vedere un elenco di ogni riga duplicata, così come una voce per ogni volta che appare una riga nel file, puoi usare il -D (tutte le linee duplicate) opzione.

Per usare questa opzione, scrivi quanto segue:

uniq -D sorted.txt | meno

L'elenco contiene una voce per ogni riga duplicata.

Se usi il --group opzione, stampa ogni riga duplicata con una riga vuota prima (prepend) o dopo ogni gruppo (append), o entrambi prima e dopo (both) ciascun gruppo.

stiamo usando append come nostro modificatore, quindi scriviamo quanto segue:

uniq --group=append sorted.txt | meno

I gruppi sono separati da righe vuote per una facile lettura.

Controllo di un certo numero di caratteri

Predefinito, uniq controlla l'intera lunghezza di ogni riga. tuttavia, se vuoi restringere i controlli ad un certo numero di caratteri, puoi usare il -w (controlla i caratteri) opzione.

In questo esempio, ripeteremo l'ultimo comando, ma limiteremo i confronti ai primi tre caratteri. Per farlo, scriviamo il seguente comando:

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

I risultati e i raggruppamenti che riceviamo sono molto diversi.

Tutte le righe che iniziano con “I b” sono raggruppati perché quelle parti delle linee sono identiche, quindi sono considerati duplicati.

Nello stesso modo, tutte le righe che iniziano con “Sono” vengono trattati come duplicati, anche se il resto del testo è diverso.

Ignora un certo numero di caratteri

Ci sono alcuni casi in cui può essere utile omettere un certo numero di caratteri all'inizio di ogni riga, come quando le righe in un file sono numerate. Oppure dì quello che ti serve uniq per saltare un timestamp e iniziare a controllare le righe per il carattere sei invece del primo carattere.

Di seguito è riportata una versione del nostro file ordinata con righe numerate.

Se vogliamo uniq per iniziare i tuoi controlli di confronto sul carattere tre, possiamo usare il -s (salta i caratteri) scrivendo quanto segue:

uniq -s 3 -d -c numerato.txt

Le righe vengono rilevate come duplicate e conteggiate correttamente. Nota che i numeri di riga mostrati sono quelli della prima occorrenza di ogni duplicato.

Puoi anche omettere i campi (una stringa di caratteri e degli spazi bianchi) al posto dei caratteri. Useremo il -f (campi) possibilità di contare uniq quali campi ignorare.

Scriviamo quanto segue per contare uniq ignorare il primo campo:

uniq -f 1 -d -c numerato.txt

Otteniamo gli stessi risultati che abbiamo ottenuto quando abbiamo detto uniq omettere tre caratteri all'inizio di ogni riga.

Ignorando il caso

Predefinito, uniq fa distinzione tra maiuscole e minuscole. Se la stessa lettera appare in maiuscolo e minuscolo, uniq considera che le linee sono diverse.

Ad esempio, vedere l'output del seguente comando:

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

Le linee “Penso che lo rispolvererò dalla mia scopa” e “Penso che lo rispolvererò dalla mia scopa” non vengono trattati come duplicati a causa della differenza di caso nella finestra di dialogo “B” Su “credere”.

Se includiamo il -i (ignora maiuscole e minuscole), tuttavia, queste righe saranno trattate come duplicati. Scriviamo quanto segue:

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

Le linee ora sono trattate come duplicate e raggruppate.


Linux ti offre una moltitudine di utilità speciali. Come molti di loro, uniq non è uno strumento che userai tutti i giorni.

Ecco perché una parte importante del diventare un esperto di Linux è ricordare quale strumento risolverà il tuo problema attuale e dove puoi trovarlo di nuovo.. tuttavia, se pratichi, sarai sulla buona strada.

oh bene, puoi sempre cercare How-To Geek; probabilmente abbiamo un articolo a riguardo.

impostaTimeout(funzione(){
!funzione(F,B,e,v,n,T,S)
{Se(f.fbq)Restituzione;n=f.fbq=funzione(){n.callMethod?
n.callMethod.apply(n,argomenti):n.queue.push(argomenti)};
Se(!f._fbq)f._fbq = n;n.push=n;n.loaded=!0;n.version='2.0′;
n.coda=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, documento,'copione',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('dentro', '335401813750447');
fbq('traccia', 'Visualizzazione della pagina');
},3000);

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.