Hoe de uniq-opdracht op Linux te gebruiken

Een shell-prompt op een Linux-computer.
Fatmawati Achmad Zaenuri / Shutterstock

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

Het "uniq dust-my-broom.txt | less" commando in een terminalvenster.

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

De uitvoer van het "uniq dust-my-broom.txt | less" commando in less in een terminalvenster.

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

Het "sort dust-my-broom.txt | uniq | less" commando in een terminalvenster.

Een gesorteerde lijst met regels verschijnt in less.

Uitvoer van sort dust-my-broom.txt |  uniq |  minder in minder in een terminalvenster

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

Het "sort dust-my-broom.txt> gesorteerd.txt” commando in een terminalvenster.’ width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Nu hebben we een voorgesorteerd bestand om mee te werken.</p>
<h2 role="heading" aria-level="2">Duplicaten tellen</h2>
<p>U kunt de <code>-c</code> (count) optie om het aantal keren dat elke regel in een bestand voorkomt af te drukken.</p>
<p>Typ de volgende opdracht:</p>
<pre>uniq -c sorted.txt | less</pre>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-536585 size-full" src="https://www.howtogeek.com/wp-content/uploads/2020/01/6-7.png" alt=

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.

Uitvoer van het "uniq -c sorteerde.txt | less" commando in less in een terminalvenster.

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

Het "uniq -c sorteerde.txt | sort -rn | less" commando in een terminalvenster.

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

Uitvoer van uniq -c gesorteerd.txt |  sorteren -rn |  minder in minder in een terminalvenster

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

Het "uniq -d gesorteerde.txt" commando in een terminalvenster.

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.

Uitvoer van het "uniq -d gesorteerde.txt" commando in een terminalvenster.

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

Het "uniq -d -c sorteerde.txt | sort -rn" commando in een terminalvenster.

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

Het "uniq -D sorteerde.txt | less" commando in een terminalvenster.

De lijst bevat een vermelding voor elke gedupliceerde regel.

Uitvoer van uniq -D gesorteerd.txt |  minder in minder in een terminalvenster

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

Het "uniq --group = append sort.txt | less" commando in een terminalvenster.

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

Uitvoer van het "uniq --group = append sort.txt | less" commando in less in een terminalvenster.

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

Het "uniq -w 3 --group = append sort.txt | less" commando in een terminalvenster.

De resultaten en groeperingen die we ontvangen zijn behoorlijk verschillend.

Uitvoer van het "uniq -w 3 --group = append sort.txt | less" commando in een terminalvenster.

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.

Een genummerd en gesorteerd bestand met dubbele regels in minder in een terminalvenster.

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

Het "uniq -s 3 -d -c numbered.txt" commando in een terminalvenster.

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

Het "uniq -f 1 -d -c numbered.txt" commando in een terminalvenster.

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

Het "uniq -d -c sorteerde.txt | sort -rn" commando en output in een terminalvenster.

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

Het "uniq -d -c -i gesorteerde.txt | sort -rn" commando in een terminalvenster.

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.

Nieuwste artikelen

Gerelateerde artikelen