Cum să utilizați comanda uniq pe Linux

Comanda Linux uniq trece prin fișierele text căutând linii unice sau duplicate. În acest ghid, acoperim versatilitatea și caracteristicile sale, precum și modul în care puteți profita la maximum de acest utilitar ingenios.

Găsirea liniilor de text potrivite pe Linux

Comanda uniq este rapid, flexibil și excelent în ceea ce face. Cu toate acestea, la fel ca multe comenzi Linux, are câteva ciudații, ceea ce este bine, atâta timp cât știți despre ele. Dacă faci pasul fără un pic de cunoștințe din interior, ai putea fi lăsat să te zgârie la rezultate. Vom sublinia aceste ciudatenii pe măsură ce mergem.

Comanda uniq este perfectă pentru cei din tabăra unică, proiectată să facă un lucru și să-l facă bine. De aceea, este, de asemenea, deosebit de potrivit pentru a lucra cu conducte și pentru a-și juca rolul în conductele de comandă. Unul dintre ei colaboratorii cei mai frecventi este sortare deoarece uniq trebuie să aibă o intrare sortată pe care să lucreze.

Să-l dăm foc!

Rulează uniq fără opțiuni

Avem un fișier text care conține versurile a lui Robert Johnson cântec Cred că îmi voi șterge mătura de praf. Să vedem ce face uniq din el.

Vom introduce următoarele pentru a canaliza ieșirea în mai puțin:

uniq dust-my-broom.txt | less

The

Obținem întreaga melodie, inclusiv replicile duplicate, în mai puțin:

Ieșirea de la

Acestea nu par să fie nici liniile unice, nici liniile duplicate.

Corect, pentru că aceasta este prima ciudatenie. Dacă rulați uniq fără opțiuni, se comportă ca și cum ați folosi opțiunea -u (linii unice). Acest lucru îi spune uniq să imprime numai liniile unice din fișier. Motivul pentru care vedeți linii duplicate este că, pentru ca uniq să considere o linie un duplicat, aceasta trebuie să fie adiacentă duplicatului său, ceea ce este locul unde intervine sortarea.

  Cum să sincronizați fișierele pe Linux cu Unison

Când sortăm fișierul, acesta grupează liniile duplicate, iar uniq le tratează ca duplicate. Vom folosi sortarea fișierului, vom canaliza ieșirea sortată în uniq și apoi vom trimite rezultatul final în less.

Pentru a face acest lucru, introducem următoarele:

sort dust-my-broom.txt | uniq | less

The

O listă sortată de linii apare în mai puțin.

Linia, „Cred că îmi voi face mătura de praf”, apare cu siguranță în cântec de mai multe ori. De fapt, se repetă de două ori în primele patru rânduri ale cântecului.

Deci, de ce apare într-o listă de linii unice? Deoarece prima dată când apare o linie în fișier, aceasta este unică; numai intrările ulterioare sunt duplicate. Vă puteți gândi la ea ca enumerarea primei apariții a fiecărei linii unice.

Să folosim din nou sortarea și să redirecționăm rezultatul într-un fișier nou. În acest fel, nu trebuie să folosim sortarea în fiecare comandă.

Introducem următoarea comandă:

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

The sorted.txt” într-o fereastră de terminal.’ width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

Acum, avem un fișier presortat cu care să lucrăm.

Numărarea duplicatelor

Puteți utiliza opțiunea -c (numărare) pentru a imprima de câte ori apare fiecare linie într-un fișier.

Tastați următoarea comandă:

uniq -c sorted.txt | less

The

Fiecare linie începe cu numărul de ori acea linie apare în fișier. Cu toate acestea, veți observa că prima linie este goală. Acest lucru vă spune că există cinci linii goale în fișier.

Ieșire din

Dacă doriți ca rezultatul să fie sortat în ordine numerică, puteți alimenta rezultatul de la uniq în sortare. În exemplul nostru, vom folosi opțiunile -r (invers) și -n (sortare numerică) și vom canaliza rezultatele în mai puțin.

Introducem următoarele:

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

The

Lista este sortată în ordine descrescătoare în funcție de frecvența de apariție a fiecărei linii.

Afișează numai linii duplicate

Dacă doriți să vedeți doar liniile care se repetă într-un fișier, puteți utiliza opțiunea -d (repetată). Indiferent de câte ori o linie este duplicată într-un fișier, aceasta este listată o singură dată.

  Cum să faci un tunel SSH pe Linux

Pentru a folosi această opțiune, introducem următoarele:

uniq -d sorted.txt

The

Liniile duplicate sunt listate pentru noi. Veți observa linia goală din partea de sus, ceea ce înseamnă că fișierul conține linii goale duplicate – nu este un spațiu lăsat de uniq pentru a compensa estetic lista.

Ieșire din

De asemenea, putem combina opțiunile -d (repetat) și -c (numărare) și canalizarea ieșirii prin sortare. Aceasta ne oferă o listă sortată a liniilor care apar de cel puțin două ori.

Introduceți următoarele pentru a utiliza această opțiune:

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

The

Listarea tuturor liniilor duplicate

Dacă doriți să vedeți o listă a fiecărei linii duplicate, precum și o intrare pentru fiecare dată când apare o linie în fișier, puteți utiliza opțiunea -D (toate liniile duplicate).

Pentru a utiliza această opțiune, introduceți următoarele:

uniq -D sorted.txt | less

The

Lista conține o intrare pentru fiecare rând duplicat.

Dacă utilizați opțiunea –group, se tipărește fiecare linie duplicată cu o linie goală, fie înainte (adăugați) fie după fiecare grup (adăugați), fie atât înainte, cât și după (ambele) fiecare grup.

Folosim append ca modificator, așa că introducem următoarele:

uniq --group=append sorted.txt | less

The

Grupurile sunt separate prin linii goale pentru a le face mai ușor de citit.

Ieșire din

Verificarea unui anumit număr de caractere

Implicit, uniq verifică întreaga lungime a fiecărei linii. Dacă doriți să restricționați verificările la un anumit număr de caractere, puteți utiliza opțiunea -w (verificare caractere).

În acest exemplu, vom repeta ultima comandă, dar limităm comparațiile la primele trei caractere. Pentru a face acest lucru, introducem următoarea comandă:

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

The

Rezultatele și grupările pe care le primim sunt destul de diferite.

Ieșire din

Toate liniile care încep cu „I b” sunt grupate, deoarece acele porțiuni ale liniilor sunt identice, deci sunt considerate a fi duplicate.

De asemenea, toate liniile care încep cu „Sunt” sunt tratate ca duplicate, chiar dacă restul textului este diferit.

Ignorarea unui anumit număr de caractere

Există unele cazuri în care ar putea fi benefic să săriți peste un anumit număr de caractere la începutul fiecărei linii, cum ar fi atunci când liniile dintr-un fișier sunt numerotate. Sau, să presupunem că aveți nevoie de uniq pentru a sări peste un marcaj de timp și pentru a începe să verificați liniile de la caracterul șase în loc de la primul caracter.

  Cele mai bune distribuții Linux pentru utilizatorii de Mac

Mai jos este o versiune a fișierului nostru sortat cu linii numerotate.

Dacă dorim ca uniq să înceapă verificările de comparație la caracterul trei, putem folosi opțiunea -s (săriți caracterele) tastând următoarele:

uniq -s 3 -d -c numbered.txt

The

Liniile sunt detectate ca duplicate și numărate corect. Observați că numerele de rând afișate sunt cele de la prima apariție a fiecărui duplicat.

De asemenea, puteți sări peste câmpuri (o serie de caractere și unele spații albe) în loc de caractere. Vom folosi opțiunea -f (câmpuri) pentru a spune uniq ce câmpuri să ignore.

Introducem următoarele pentru a spune uniq să ignore primul câmp:

uniq -f 1 -d -c  numbered.txt

The

Obținem aceleași rezultate pe care le-am obținut atunci când i-am spus uniq să omite trei caractere la începutul fiecărei rânduri.

Ignorarea cazului

În mod implicit, uniq face distincție între majuscule și minuscule. Dacă aceeași literă apare cu majuscule și litere mici, uniq consideră că liniile sunt diferite.

De exemplu, verificați rezultatul de la următoarea comandă:

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

The

Rândurile „Cred că îmi voi șterge mătura” și „Cred că îmi voi șterge mătura” nu sunt tratate ca duplicate, din cauza diferenței dintre majuscule și majuscule de pe „B” în „crede”.

Dacă includem opțiunea -i (ignorați majusculele) totuși, aceste linii vor fi tratate ca duplicate. Introducem următoarele:

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

The

Liniile sunt acum tratate ca duplicate și grupate împreună.

Linux vă pune la dispoziție o multitudine de utilități speciale. La fel ca multe dintre ele, uniq nu este un instrument pe care îl vei folosi în fiecare zi.

De aceea, o mare parte a devenirii competente în Linux este să vă amintiți ce instrument vă va rezolva problema actuală și unde o puteți găsi din nou. Dacă exersezi, totuși, vei fi pe drumul tău bun.

Sau, puteți oricând să căutați How-To Geek – probabil că avem un articol despre el.