Come usare il comando uniq su Linux

Un prompt della shell su un computer Linux.

Fatmawati Achmad Zaenuri/Shutterstock



Il Linux |_+_| il comando scorre i tuoi file di testo alla ricerca di linee univoche o duplicate. In questa guida, tratteremo la sua versatilità e le sue caratteristiche, oltre a come sfruttare al meglio questa ingegnosa utility.

Trovare righe di testo corrispondenti su Linux

Il |_+_| il comando è veloce, flessibile e ottimo in quello che fa . Tuttavia, come molti comandi di Linux, ha alcune stranezze, il che va bene, purché tu ne sia a conoscenza. Se fai il grande passo senza un po 'di know-how da insider, potresti essere lasciato a grattarti la testa per i risultati. Indicheremo queste stranezze mentre procediamo.





Il |_+_| il comando è perfetto per quelli nel campo risoluto, progettato per fare una cosa e farlo bene. Ecco perché è anche particolarmente adatto a lavorare con i tubi e fare la sua parte nelle condutture di comando. Uno dei suoi collaboratori più assidui è |_+_| perché |_+_| deve avere un input ordinato su cui lavorare.

Accendiamolo!



IMPARENTATO: Come usare le pipe su Linux

Esecuzione di uniq senza opzioni

Abbiamo un file di testo che contiene il testo di di Robert Johnson canzone Credo che spolverò la mia scopa . Vediamo cosa |_+_| ne fa.

Digitiamo quanto segue per reindirizzare l'output in |_+_|:



uniq

Otteniamo l'intera canzone, incluse le righe duplicate, in |_+_|:

Annuncio pubblicitario

Non sembrano essere né le linee uniche né le linee duplicate.

Giusto, perché questa è la prima stranezza. Se esegui |_+_| senza opzioni, si comporta come se avessi usato |_+_| (linee uniche) opzione. Questo dice |_+_| per stampare solo le righe univoche del file. Il motivo per cui vedi righe duplicate è perché, per |_+_| per considerare una linea un duplicato, deve essere adiacente al suo duplicato, che è dove |_+_| entra.

Quando ordiniamo il file, raggruppa le righe duplicate e |_+_| li tratta come duplicati. Useremo |_+_| sul file, reindirizza l'output ordinato a |_+_|, quindi reindirizza l'output finale a |_+_|.

Per farlo, digitiamo quanto segue:

uniq

Viene visualizzato un elenco ordinato di righe in |_+_|.

La linea, credo che spolverò la mia scopa, appare sicuramente nella canzone più di una volta. In effetti, viene ripetuto due volte nelle prime quattro righe della canzone.

Quindi, perché viene visualizzato in un elenco di linee univoche? Poiché la prima volta che una riga appare nel file, è unica; solo le voci successive sono duplicati. Puoi pensarlo come un elenco della prima occorrenza di ogni riga univoca.

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

Digitiamo il seguente comando:

uniq

Ora abbiamo un file preordinato con cui lavorare.

Conteggio dei duplicati

Puoi usare il |_+_| (count) per stampare il numero di volte in cui ogni riga viene visualizzata in un file.

Digita il seguente comando:

sort

Annuncio pubblicitario

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, puoi alimentare l'output da |_+_| in |_+_|. Nel nostro esempio, useremo |_+_| (retromarcia) e |_+_| (ordinamento numerico) e reindirizzare i risultati in |_+_|.

Digitiamo quanto segue:

uniq

L'elenco è ordinato in ordine decrescente in base alla frequenza di comparsa di ciascuna riga.

Elencare solo righe duplicate

Se vuoi vedere solo le righe che sono ripetute in un file, puoi usare |_+_| (ripetuto) opzione. Non importa quante volte una riga viene duplicata in un file, viene elencata solo una volta.

Per utilizzare questa opzione, digitiamo quanto segue:

uniq

Le righe 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 |_+_| per compensare esteticamente l'elenco.

Annuncio pubblicitario

Possiamo anche combinare il |_+_| (ripetuto) e |_+_| (count) opzioni e reindirizzare l'output tramite |_+_|. Questo ci dà un elenco ordinato delle righe che appaiono almeno due volte.

Digita quanto segue per utilizzare questa opzione:

less

Elenco di tutte le righe duplicate

Se vuoi vedere un elenco di ogni riga duplicata, così come una voce per ogni volta che una riga appare nel file, puoi usare il |_+_| (tutte le righe duplicate).

Per utilizzare questa opzione, digita quanto segue:

less

L'elenco contiene una voce per ogni riga duplicata.

Se usi |_+_| opzione, stampa ogni riga duplicata con una riga vuota prima (|_+_|) o dopo ogni gruppo (|_+_|), o prima e dopo (|_+_|) ogni gruppo.

Stiamo usando |_+_| come nostro modificatore, quindi digitiamo quanto segue:

uniq

I gruppi sono separati da righe vuote per facilitarne la lettura.

Controllo di un certo numero di caratteri

Per impostazione predefinita, |_+_| controlla l'intera lunghezza di ogni riga. Se vuoi restringere i controlli ad un certo numero di caratteri, invece, puoi usare il |_+_| (controlla i caratteri) opzione.

Annuncio pubblicitario

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

-u

I risultati e i raggruppamenti che riceviamo sono molto diversi.

Tutte le linee che iniziano con I b sono raggruppate insieme perché quelle parti delle linee sono identiche, quindi sono considerate duplicati.

Allo stesso modo, tutte le righe che iniziano con I sono trattate come duplicati, anche se il resto del testo è diverso.

Ignorare un certo numero di caratteri

Ci sono alcuni casi in cui potrebbe essere utile saltare un certo numero di caratteri all'inizio di ogni riga, come quando le righe in un file sono numerate. Oppure, diciamo che hai bisogno di |_+_| per saltare un timestamp e iniziare a controllare le righe dal carattere sei invece che dal primo carattere.

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

Se vogliamo |_+_| per iniziare i suoi controlli di confronto al carattere tre, possiamo usare |_+_| (salta caratteri) digitando quanto segue:

uniq

Annuncio pubblicitario

Le righe vengono rilevate come duplicate e contate correttamente. Notare che i numeri di riga visualizzati sono quelli della prima occorrenza di ciascun duplicato.

Puoi anche saltare i campi (una sequenza di caratteri e alcuni spazi bianchi) invece dei caratteri. Useremo il |_+_| (campi) opzione per indicare |_+_| quali campi ignorare.

Digitiamo quanto segue per dire |_+_| per ignorare il primo campo:

uniq

Otteniamo gli stessi risultati che abbiamo ottenuto quando abbiamo detto |_+_| per saltare tre caratteri all'inizio di ogni riga.

Ignorando il caso

Per impostazione predefinita, |_+_| fa distinzione tra maiuscole e minuscole. Se la stessa lettera appare in maiuscolo e in minuscolo, |_+_| ritiene che le linee siano diverse.

Ad esempio, controlla l'output del seguente comando:

sort

Annuncio pubblicitario

Le linee Credo che spolverò la mia scopa e credo che spolverò la mia scopa non sono trattate come duplicati a causa della differenza nel caso sulla B in credere.

Se includiamo il |_+_| (ignora maiuscole e minuscole), tuttavia, queste righe verranno trattate come duplicati. Digitiamo quanto segue:

uniq

Le linee ora vengono trattate come duplicati e raggruppate insieme.


Linux mette a tua disposizione una moltitudine di utilità speciali. Come molti di loro, |_+_| non è uno strumento che userai tutti i giorni.

Ecco perché una parte importante del diventare abili in Linux è ricordare quale strumento risolverà il tuo problema attuale e dove puoi trovarlo di nuovo. Se ti eserciti, però, sarai sulla buona strada.

Oppure, puoi sempre semplicemente cercare How-To Geek: probabilmente abbiamo un articolo su di esso.

Comandi Linux
File catrame · pv · gatto · tac · chmod · presa · differenza · sed · Con · uomo · spinto · popd · fsck · testdisk · seguito · fd · pandoc · cd · $PATH · awk · giuntura · jq · piega · unico · journalctl · coda · stato · ls · fstab · buttato fuori · meno · chgrp · chown · rev · Guarda · stringhe · genere · rinominare · cerniera lampo · decomprimere · montare · smontare · installare · fdisk · mkfs · rm · rmdir · rsync · df · gpg · noi · nano · mkdir · a partire dal · ln · toppa · convertire · rclone · brandello · SRM
Processi alias · schermo · superiore · Bello · renice · progresso · strace · sistema · tmux · chsh · storia · in · lotto · libero · quale · dmesg · usermod · ps · chroot · xargs · tty · mignolo · lsof · vmstat · tempo scaduto · parete · · uccisione · dormire · sudo · il suo · volta · gruppoaggiungi · usermod · gruppi · lshw · spegnimento · riavviare · fermare · spegni · passwd · lscpu · crontab · Data · bg · fg
Rete netstat · ping · traceroute · ip · ss · chi è · fail2ban · bmon · voi · dito · nmap · ftp · arricciare · wget · chi · chi sono · In · iptables · ssh-keygen · ufw

IMPARENTATO: I migliori laptop Linux per sviluppatori e appassionati

LEGGI SUCCESSIVO
  • › La cartella del computer è 40: come la star di Xerox ha creato il desktop
  • › Che cos'è la protezione anticaduta MIL-SPEC?
  • › Come trovare il tuo Spotify Wrapped 2021
  • › Funzioni e formule in Microsoft Excel: qual è la differenza?
  • & rsaquo; Cyber ​​Monday 2021: le migliori offerte tecnologiche
  • › 5 siti Web che ogni utente Linux dovrebbe aggiungere ai segnalibri
Foto del profilo di Dave McKay Dave McKay
Dave McKay ha usato per la prima volta i computer quando era in voga il nastro di carta perforata, e da allora ha programmato. Dopo oltre 30 anni nel settore IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera ha lavorato come programmatore freelance, manager di un team internazionale di sviluppo software, project manager di servizi IT e, più recentemente, come Data Protection Officer. I suoi scritti sono stati pubblicati da howtogeek.com, cloudavvyit.com, itenterpriser.com e opensource.com. Dave è un evangelista di Linux e un sostenitore dell'open source.
Leggi la biografia completa

Articoli Interessanti