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.
Cuprins
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
Obținem întreaga melodie, inclusiv replicile duplicate, în mai puțin:
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.
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
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
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
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.
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
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ă.
Pentru a folosi această opțiune, introducem următoarele:
uniq -d sorted.txt
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.
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
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
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
Grupurile sunt separate prin linii goale pentru a le face mai ușor de citit.
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
Rezultatele și grupările pe care le primim sunt destul de diferite.
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.
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
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
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
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
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.