Slik bruker du uniq-kommandoen på Linux

Linux uniq-kommandoen pisker gjennom tekstfilene dine på jakt etter unike eller dupliserte linjer. I denne guiden dekker vi dens allsidighet og funksjoner, samt hvordan du kan få mest mulig ut av dette smarte verktøyet.

Finne samsvarende tekstlinjer på Linux

Den unike kommandoen er rask, fleksibel og god på det den gjør. Imidlertid, som mange Linux-kommandoer, har den noen særheter – noe som er greit, så lenge du vet om dem. Hvis du tar skrittet fullt ut uten litt innsidekunnskap, kan du godt stå og klø deg i hodet over resultatene. Vi vil påpeke disse særhetene mens vi går.

Uniq-kommandoen er perfekt for de som er i den enkeltsinnede, designet-for-å-gjøre-en-ting-og-gjøre-det-bra-leiren. Derfor er den også spesielt godt egnet til å jobbe med rør og spille sin rolle i kommandorørledninger. En av dens hyppigste samarbeidspartnere er sortering fordi uniq må ha sortert input å jobbe med.

La oss fyre opp!

Kjører uniq uten alternativer

Vi har en tekstfil som inneholder tekstene til Robert Johnsons sang Jeg tror jeg skal støve kosten min. La oss se hva det er unikt med det.

Vi skriver inn følgende for å overføre utdataene til mindre:

uniq dust-my-broom.txt | less

De

Vi får hele sangen, inkludert dupliserte linjer, på mindre:

Utgangen fra

Det ser ikke ut til å være verken de unike linjene eller dupliserte linjene.

Riktig – fordi dette er den første innseilingen. Hvis du kjører uniq uten alternativer, oppfører det seg som om du brukte alternativet -u (unike linjer). Dette forteller uniq å skrive ut bare de unike linjene fra filen. Grunnen til at du ser dupliserte linjer er fordi, for at uniq skal betrakte en linje som en duplikat, må den være ved siden av duplikatet, som er der sortering kommer inn.

Når vi sorterer filen, grupperer den de dupliserte linjene, og uniq behandler dem som duplikater. Vi bruker sorter på filen, overfører den sorterte utgangen til uniq, og deretter overfører vi den endelige utgangen til mindre.

  Slik bruker du chgrp-kommandoen på Linux

For å gjøre det skriver vi følgende:

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

De

En sortert liste med linjer vises i mindre.

Linjen, «I believe I’ll dust my broom,» vises definitivt i sangen mer enn én gang. Faktisk gjentas det to ganger innenfor de fire første linjene i sangen.

Så hvorfor vises det i en liste over unike linjer? Fordi første gang en linje vises i filen, er den unik; bare de påfølgende oppføringene er duplikater. Du kan tenke på det som en liste over den første forekomsten av hver unike linje.

La oss bruke sorter igjen og omdirigere utdataene til en ny fil. På denne måten trenger vi ikke bruke sortering i hver kommando.

Vi skriver inn følgende kommando:

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

De sorted.txt»-kommandoen i et terminalvindu.» width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

Nå har vi en forhåndssortert fil å jobbe med.

Teller duplikater

Du kan bruke alternativet -c (telling) for å skrive ut antall ganger hver linje vises i en fil.

Skriv inn følgende kommando:

uniq -c sorted.txt | less

De

Hver linje begynner med antall ganger den linjen vises i filen. Du vil imidlertid legge merke til at den første linjen er tom. Dette forteller deg at det er fem tomme linjer i filen.

Utgang fra

Hvis du vil ha utdataene sortert i numerisk rekkefølge, kan du mate utdataene fra uniq til sortering. I vårt eksempel bruker vi alternativene -r (omvendt) og -n (numerisk sortering), og overfører resultatene til mindre.

Vi skriver følgende:

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

De

Listen er sortert i synkende rekkefølge basert på frekvensen av hver linjes utseende.

Lister bare dupliserte linjer

Hvis du bare vil se linjene som gjentas i en fil, kan du bruke alternativet -d (gjentatt). Uansett hvor mange ganger en linje dupliseres i en fil, vises den bare én gang.

For å bruke dette alternativet skriver vi følgende:

uniq -d sorted.txt

De

De dupliserte linjene er oppført for oss. Du vil legge merke til den tomme linjen øverst, noe som betyr at filen inneholder dupliserte tomme linjer – det er ikke et mellomrom igjen av uniq for å kosmetisk forskyve oppføringen.

  Slik overfører du Android-filer trådløst til et Linux-skrivebord

Utgang fra

Vi kan også kombinere alternativene -d (gjentatte) og -c (telle) og sende utdataene gjennom sortering. Dette gir oss en sortert liste over linjene som vises minst to ganger.

Skriv inn følgende for å bruke dette alternativet:

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

De

Liste over alle dupliserte linjer

Hvis du vil se en liste over hver dupliserte linje, samt en oppføring for hver gang en linje vises i filen, kan du bruke alternativet -D (alle dupliserte linjer).

For å bruke dette alternativet, skriver du følgende:

uniq -D sorted.txt | less

De

Oppføringen inneholder en oppføring for hver duplisert linje.

Hvis du bruker –gruppe-alternativet, skriver den ut hver dupliserte linje med en tom linje enten før (prepend) eller etter hver gruppe (legg til), eller både før og etter (begge) hver gruppe.

Vi bruker append som modifikator, så vi skriver inn følgende:

uniq --group=append sorted.txt | less

De

Gruppene er atskilt med tomme linjer for å gjøre dem lettere å lese.

Utgang fra

Kontrollere et visst antall tegn

Som standard sjekker uniq hele lengden på hver linje. Hvis du vil begrense sjekkene til et visst antall tegn, kan du imidlertid bruke alternativet -w (sjekk tegn).

I dette eksemplet gjentar vi den siste kommandoen, men begrenser sammenligningene til de tre første tegnene. For å gjøre det, skriver vi følgende kommando:

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

De

Resultatene og grupperingene vi får er ganske forskjellige.

Utgang fra

Alle linjer som starter med «I b» er gruppert sammen fordi de delene av linjene er identiske, så de anses å være duplikater.

På samme måte behandles alle linjer som starter med «jeg» som duplikater, selv om resten av teksten er annerledes.

Ignorerer et visst antall tegn

Det er noen tilfeller der det kan være fordelaktig å hoppe over et visst antall tegn på begynnelsen av hver linje, for eksempel når linjer i en fil er nummerert. Eller si at du trenger uniq for å hoppe over et tidsstempel og begynne å sjekke linjene fra tegn seks i stedet for fra det første tegnet.

  Hvordan spille Minecraft på Linux med GDLauncher

Nedenfor er en versjon av vår sorterte fil med nummererte linjer.

Hvis vi vil at uniq skal starte sine sammenligningssjekker ved tegn tre, kan vi bruke alternativet -s (hopp over tegn) ved å skrive følgende:

uniq -s 3 -d -c numbered.txt

De

Linjene oppdages som duplikater og telles riktig. Legg merke til at linjenumrene som vises er de for den første forekomsten av hvert duplikat.

Du kan også hoppe over felt (en serie med tegn og noe mellomrom) i stedet for tegn. Vi bruker alternativet -f (felt) for å fortelle uniq hvilke felt som skal ignoreres.

Vi skriver følgende for å fortelle uniq å ignorere det første feltet:

uniq -f 1 -d -c  numbered.txt

De

Vi får de samme resultatene som vi fikk da vi ba uniq hoppe over tre tegn på begynnelsen av hver linje.

Ignorerer sak

Som standard skiller uniq mellom store og små bokstaver. Hvis den samme bokstaven vises med avkortet og med små bokstaver, anser uniq linjene som forskjellige.

Sjekk for eksempel utdataene fra følgende kommando:

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

De

Linjene «I Believe I’ll dust my broom» og «I believe I’ll dust my broom» behandles ikke som duplikater på grunn av forskjellen i kasus på «B» i «believe».

Hvis vi inkluderer alternativet -i (ignorer store og små bokstaver), vil disse linjene imidlertid bli behandlet som duplikater. Vi skriver følgende:

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

De

Linjene behandles nå som duplikater og grupperes sammen.

Linux stiller en rekke spesialverktøy til din disposisjon. Som mange av dem, er ikke uniq et verktøy du vil bruke hver dag.

Det er derfor en stor del av å bli dyktig i Linux er å huske hvilket verktøy som vil løse ditt nåværende problem, og hvor du kan finne det igjen. Men hvis du trener, er du på god vei.

Eller du kan alltid bare søke i How-To Geek – vi har sannsynligvis en artikkel om det.