
Het Linux uniq commando bladert door uw tekstbestanden op zoek naar unieke of dubbele regels. In deze gids bespreken we de veelzijdigheid en functies ervan, en hoe u het meeste uit dit handige hulpprogramma kunt halen.
Overeenkomende tekstregels vinden op Linux
De uniq commando is snel, flexibel en goed in wat het doet. Echter, zoals veel Linux-commando’s, heeft het een paar eigenaardigheden – en dat is prima, zolang je er maar van af weet. Als je de sprong waagt zonder een beetje insider-knowhow, zou je je hoofd kunnen krabben over de resultaten. We zullen op deze eigenaardigheden wijzen terwijl we verder gaan.
De uniq commando is perfect voor degenen in het doelbewuste, ontworpen-om-één-ding-en-goed-kamp te doen. Daarom is het ook bijzonder geschikt om met pijpen te werken en een rol te spelen in commandopijpleidingen. Een van de meest voorkomende medewerkers is sort omdat uniq moet gesorteerde invoer hebben om aan te werken.
Laten we het opstarten!
VERWANT: Pipes gebruiken op Linux
Uniq draaien zonder opties
We hebben een tekstbestand met de tekst van het lied van Robert Johnson Ik geloof dat ik mijn bezem zal afstoffen. Eens kijken wat uniq maakt ervan.
We typen het volgende om de uitvoer naar door te sturen less:
uniq dust-my-broom.txt | less

We krijgen het hele nummer, inclusief dubbele regels, in less:

Dat lijken noch de unieke lijnen, noch de dubbele regels te zijn.
Juist – want dit is de eerste gril. Als je rent uniq zonder opties gedraagt het zich alsof u de -u (unieke lijnen) optie. Dit vertelt uniq om alleen de unieke regels uit het bestand af te drukken. De reden dat u dubbele regels ziet, is omdat, voor uniq om een regel als duplicaat te beschouwen, moet deze naast zijn duplicaat staan, en dat is waar sort komt binnen.
Wanneer we het bestand sorteren, groepeert het de dubbele regels, en uniq behandelt ze als duplicaten. We zullen gebruiken sort op het bestand leid je de gesorteerde uitvoer naar uniqen leid de uiteindelijke uitvoer vervolgens naar less.
Om dit te doen, typen we het volgende:
sort dust-my-broom.txt | uniq | less

Een gesorteerde lijst met regels verschijnt in less.

De regel “Ik geloof dat ik mijn bezem zal afstoffen”, komt zeker meer dan eens in het nummer voor. Het wordt zelfs twee keer herhaald binnen de eerste vier regels van het nummer.
Dus waarom wordt het weergegeven in een lijst met unieke regels? Omdat de eerste keer dat een regel in het bestand verschijnt, deze uniek is; alleen de volgende vermeldingen zijn duplicaten. U kunt het zien als een lijst van de eerste keer dat elke unieke regel voorkomt.
Laten we gebruiken sort opnieuw en leid de uitvoer om naar een nieuw bestand. Op deze manier hoeven we niet te gebruiken sort in elk commando.
We typen het volgende commando:
sort dust-my-broom.txt > sorted.txt

Elke regel begint met het aantal keren dat die regel in het bestand voorkomt. U zult echter merken dat de eerste regel leeg is. Dit geeft aan dat er vijf lege regels in het bestand zijn.

Als u de uitvoer in numerieke volgorde wilt sorteren, kunt u de uitvoer invoeren vanaf uniq in sort. In ons voorbeeld gebruiken we de -r (omgekeerd) en -n (numerieke sorteer) opties, en leid de resultaten naar less.
We typen het volgende:
uniq -c sorted.txt | sort -rn | less

De lijst is in aflopende volgorde gesorteerd op basis van de frequentie waarmee elke regel wordt weergegeven.

Alleen dubbele regels vermelden
Als u alleen de regels wilt zien die in een bestand worden herhaald, kunt u de -d (herhaalde) optie. Het maakt niet uit hoe vaak een regel in een bestand wordt gedupliceerd, deze wordt slechts één keer vermeld.
Om deze optie te gebruiken, typen we het volgende:
uniq -d sorted.txt

De gedupliceerde regels worden voor ons opgesomd. U ziet de lege regel bovenaan, wat betekent dat het bestand dubbele lege regels bevat – het is geen spatie die wordt achtergelaten uniq om de aanbieding cosmetisch te compenseren.

We kunnen ook de -d (herhaald) en -c (tel) opties en leid de output door sort. Dit geeft ons een gesorteerde lijst van de regels die minstens twee keer voorkomen.
Typ het volgende om deze optie te gebruiken:
uniq -d -c sorted.txt | sort -rn

Alle dubbele regels weergeven
Als u een lijst van elke gedupliceerde regel wilt zien, evenals een invoer voor elke keer dat een regel in het bestand verschijnt, kunt u de -D (alle dubbele regels) optie.
Om deze optie te gebruiken typt u het volgende:
uniq -D sorted.txt | less

De lijst bevat een vermelding voor elke gedupliceerde regel.

Als u de --group optie, het drukt elke gedupliceerde regel af met een lege regel ofwel vóór (prepend) of na elke groep (append), of zowel voor als na (both) elke groep.
We gebruiken append als onze modifier, dus we typen het volgende:
uniq --group=append sorted.txt | less

De groepen zijn gescheiden door lege regels om ze gemakkelijker te kunnen lezen.

Een bepaald aantal tekens controleren
Standaard, uniq controleert de volledige lengte van elke regel. Als u de controles echter tot een bepaald aantal tekens wilt beperken, kunt u de -w (controleer tekens) optie.
In dit voorbeeld herhalen we de laatste opdracht, maar beperken we de vergelijkingen tot de eerste drie tekens. Om dit te doen, typen we het volgende commando:
uniq -w 3 --group=append sorted.txt | less

De resultaten en groeperingen die we ontvangen zijn behoorlijk verschillend.

Alle regels die beginnen met ‘I b’ zijn gegroepeerd omdat die delen van de regels identiek zijn, dus ze worden als duplicaten beschouwd.
Evenzo worden alle regels die beginnen met “Ik” behandeld als duplicaten, zelfs als de rest van de tekst anders is.
Een bepaald aantal tekens negeren
In sommige gevallen kan het nuttig zijn om een bepaald aantal tekens aan het begin van elke regel over te slaan, bijvoorbeeld wanneer regels in een bestand genummerd zijn. Of, zeg dat je nodig hebt uniq om over een tijdstempel te springen en de regels vanaf teken zes te controleren in plaats van vanaf het eerste teken.
Hieronder ziet u een versie van ons gesorteerde bestand met genummerde regels.

Als we willen uniq om de vergelijkingscontroles bij teken drie te starten, kunnen we de -s (tekens overslaan) optie door het volgende te typen:
uniq -s 3 -d -c numbered.txt

De lijnen worden gedetecteerd als duplicaten en correct geteld. Merk op dat de weergegeven regelnummers die zijn van de eerste keer dat elk duplicaat voorkomt.
U kunt ook velden overslaan (een reeks tekens en wat witruimte) in plaats van tekens. We gebruiken de -f (velden) optie om te vertellen uniq welke velden moeten worden genegeerd.
We typen het volgende om te vertellen uniq om het eerste veld te negeren:
uniq -f 1 -d -c numbered.txt

We krijgen dezelfde resultaten als toen we het vertelden uniq om aan het begin van elke regel drie tekens over te slaan.
Case negeren
Standaard, uniq is hoofdlettergevoelig. Als dezelfde letter met een afgetopte en in kleine letters wordt weergegeven, uniq beschouwt de lijnen als verschillend.
Bekijk bijvoorbeeld de uitvoer van de volgende opdracht:
uniq -d -c sorted.txt | sort -rn

De regels “Ik geloof dat ik mijn bezem zal afstoffen” en “Ik geloof dat ik mijn bezem zal afstoffen” worden niet als duplicaten behandeld vanwege het verschil tussen de letters “B” in “geloven”.
Als we de -i (hoofdlettergebruik negeren), maar deze regels worden als duplicaten behandeld. We typen het volgende:
uniq -d -c -i sorted.txt | sort -rn

De regels worden nu als duplicaten behandeld en gegroepeerd.
Linux stelt een groot aantal speciale hulpprogramma’s tot uw beschikking. Zoals velen van hen, uniq is geen hulpmiddel dat u elke dag gebruikt.
Daarom is een groot deel van het bekwaam worden in Linux onthouden welke tool je huidige probleem oplost en waar je het terug kunt vinden. Als je echter oefent, ben je goed op weg.
Of je kunt altijd gewoon zoeken in How-To Geek – we hebben er waarschijnlijk een artikel over.