Az uniq parancs használata Linuxon

A Linux uniq parancs végigpörgeti a szöveges fájlokat, egyedi vagy ismétlődő sorokat keresve. Ebben az útmutatóban bemutatjuk annak sokoldalúságát és funkcióit, valamint azt, hogyan hozhatja ki a legtöbbet ebből a remek segédprogramból.

Egyező szövegsorok keresése Linuxon

Az uniq parancs az gyors, rugalmas és kiváló abban, amit csinál. Azonban, mint sok Linux-parancs, ennek is van néhány furcsasága – ami rendben van, ha ismeri őket. Ha belevág egy kis bennfentes know-how nélkül, akkor könnyen vakarhatja a fejét az eredményeken. Menet közben rámutatunk ezekre a furcsaságokra.

Az uniq parancs tökéletes azok számára, akik az együgyű, egy dolgot csinálni és jól csinálni táborba tartoznak. Ez az oka annak, hogy különösen alkalmas csővel való munkavégzésre és a parancsfolyamatokban való szerepvállalásra. Az egyik leggyakoribb munkatársai rendezés, mert az uniq-nak rendezett bemenettel kell rendelkeznie, amelyen dolgozni tud.

Gyújtsunk rá!

Uniq futtatása opciók nélkül

Van egy szöveges fájlunk, amely tartalmazza a dalszövegeket Robert Johnsoné dal Azt hiszem, leporolom a seprűmet. Lássuk, mit tesz belőle a uniq.

A következőket írjuk be, hogy a kimenetet kisebbre cseréljük:

uniq dust-my-broom.txt | less

A

A teljes dalt, beleértve a duplikált sorokat is, kevesebben kapjuk meg:

A kimenet a

Úgy tűnik, hogy ezek sem az egyedi sorok, sem nem az ismétlődő sorok.

Helyes – mert ez az első furcsaság. Ha az uniq-ot opciók nélkül futtatja, úgy viselkedik, mintha az -u (egyedi sorok) kapcsolót használta volna. Ez arra utasítja a uniq-ot, hogy csak az egyedi sorokat nyomtassa ki a fájlból. Azért látja az ismétlődő sorokat, mert ahhoz, hogy az uniq egy sort duplikációnak tekintsen, szomszédosnak kell lennie a másolatával, és itt jön be a rendezés.

  Diamester létrehozása a Microsoft PowerPointban

Amikor rendezzük a fájlt, az ismétlődő sorokat csoportosítja, és a uniq duplikátumként kezeli őket. A fájlon a sort használjuk, a rendezett kimenetet Uniq-ba, majd a végső kimenetet lessbe.

Ehhez a következőket írjuk be:

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

A

A sorok rendezett listája kevesebbben jelenik meg.

A „Hiszem, hogy leporolom a seprűmet” sor határozottan többször is megjelenik a dalban. Valójában kétszer is megismétlődik a dal első négy sorában.

Szóval, miért jelenik meg az egyedi sorok listájában? Mivel az első alkalommal, amikor egy sor megjelenik a fájlban, az egyedi; csak a következő bejegyzések ismétlődnek. Úgy is felfoghatja, hogy minden egyedi sor első előfordulását felsorolja.

Használjuk újra a sort, és irányítsuk át a kimenetet egy új fájlba. Így nem kell minden parancsban használnunk a sort.

A következő parancsot írjuk be:

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

A sorted.txt” parancsot egy terminálablakban. width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onrror=”this.onrror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

Most van egy előre rendezett fájl, amellyel dolgozni kell.

Ismétlődések számlálása

A -c (count) kapcsolóval kinyomtathatja, hányszor jelenik meg egy fájlban az egyes sorok.

Írja be a következő parancsot:

uniq -c sorted.txt | less

A

Minden sor azzal kezdődik, ahányszor az adott sor megjelenik a fájlban. Azonban észre fogja venni, hogy az első sor üres. Ez azt jelzi, hogy a fájlban öt üres sor van.

Kimenet a

Ha a kimenetet numerikus sorrendbe szeretné rendezni, az uniq kimenetet a rendezésbe betáplálhatja. Példánkban az -r (fordított) és az -n (numerikus rendezés) opciókat fogjuk használni, és az eredményeket kisebbre vezetjük.

A következőket írjuk be:

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

A

A lista csökkenő sorrendben van rendezve az egyes sorok megjelenési gyakorisága alapján.

Csak duplikált sorok listázása

Ha csak a fájlban ismétlődő sorokat szeretné látni, használhatja a -d (ismétlődő) kapcsolót. Nem számít, hányszor duplikálódik egy sor egy fájlban, csak egyszer szerepel a listán.

Az opció használatához a következőket írjuk be:

uniq -d sorted.txt

A

A duplikált sorok felsorolva vannak számunkra. Észreveheti az üres sort a tetején, ami azt jelenti, hogy a fájl ismétlődő üres sorokat tartalmaz – ez nem az uniq által hagyott hely a lista kozmetikai ellensúlyozására.

  Hogyan lehet biztonságosan és névtelenül elérni a sötét webet és a mélyhálót

Kimenet a

Kombinálhatjuk a -d (ismétlődő) és -c (count) opciókat is, és a kimenetet rendezésen keresztül vezetjük. Így egy rendezett listát kapunk a legalább kétszer megjelenő sorokról.

Az opció használatához írja be a következőket:

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

A

Az összes duplikált sor felsorolása

Ha látni szeretné az összes duplikált sor listáját, valamint egy bejegyzést minden alkalommal, amikor egy sor megjelenik a fájlban, használhatja a -D (minden duplikált sor) opciót.

Az opció használatához írja be a következőket:

uniq -D sorted.txt | less

A

A lista minden duplikált sorhoz tartalmaz egy bejegyzést.

Ha a –group opciót használja, akkor minden duplikált sort egy üres sorral nyomtat, vagy minden csoport előtt (előtt) vagy után (hozzáfűzés), vagy mindkét csoport előtt és után (mindkettő).

Az append-et használjuk módosítóként, ezért a következőket írjuk be:

uniq --group=append sorted.txt | less

A

A könnyebb olvashatóság érdekében a csoportokat üres sorok választják el egymástól.

Kimenet a

Bizonyos számú karakter ellenőrzése

Alapértelmezés szerint az uniq az egyes sorok teljes hosszát ellenőrzi. Ha azonban az ellenőrzéseket bizonyos számú karakterre szeretné korlátozni, használhatja a -w (karakterellenőrző) opciót.

Ebben a példában megismételjük az utolsó parancsot, de az összehasonlítást az első három karakterre korlátozzuk. Ehhez a következő parancsot írjuk be:

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

A

A kapott eredmények és csoportosítások egészen eltérőek.

Kimenet a

Az „I b” betűvel kezdődő összes sor egy csoportba kerül, mivel a sorok ezen részei azonosak, így ismétlődőnek tekintendők.

Hasonlóképpen, minden „vagyok” szóval kezdődő sor ismétlődőnek minősül, még akkor is, ha a szöveg többi része eltér.

Bizonyos számú karakter figyelmen kívül hagyása

Vannak olyan esetek, amikor előnyös lehet bizonyos számú karaktert kihagyni az egyes sorok elején, például amikor egy fájl sorai meg vannak számozva. Vagy tegyük fel, hogy uniq kell ahhoz, hogy átugorjon egy időbélyegzőn, és elkezdje ellenőrizni a sorokat a hatodik karaktertől az első karakter helyett.

  Játékok elrejtése vagy eltávolítása a Steam-könyvtárból

Alább látható a rendezett fájlunk számozott sorokkal ellátott verziója.

Ha azt szeretnénk, hogy az uniq a harmadik karakternél kezdje az összehasonlítás ellenőrzését, használhatjuk a -s (karakterek kihagyása) opciót a következő beírásával:

uniq -s 3 -d -c numbered.txt

A

A vonalakat ismétlődőként észleli, és megfelelően számolja. Figyelje meg, hogy a megjelenített sorszámok az egyes ismétlődések első előfordulásának sorszámai.

A karakterek helyett kihagyhatja a mezőket (karakterek sorozata és néhány szóköz). A -f (fields) kapcsolót fogjuk használni, hogy megmondjuk az uniq-nak, hogy mely mezőket hagyja figyelmen kívül.

A következőket írjuk be, hogy az uniq figyelmen kívül hagyja az első mezőt:

uniq -f 1 -d -c  numbered.txt

A

Ugyanazt az eredményt kapjuk, mint amikor azt mondtuk az uniq-nak, hogy hagyjon ki három karaktert minden sor elején.

Case figyelmen kívül hagyása

Alapértelmezés szerint az uniq megkülönbözteti a kis- és nagybetűket. Ha ugyanaz a betű nagybetűvel és kisbetűvel jelenik meg, az uniq a sorokat eltérőnek tekinti.

Például nézze meg a következő parancs kimenetét:

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

A

Az „Elhiszem, hogy leporolom a seprűmet” és „Azt hiszem, leporolom a seprűmet” sorokat nem kezeljük ismétlődőként, mert a „B” betűk között különbség van a „hiszem” szóban.

Ha azonban belevesszük a -i (kis- és nagybetűk figyelmen kívül hagyása) opciót, akkor ezek a sorok ismétlődőként lesznek kezelve. A következőket írjuk be:

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

A

A sorokat a rendszer most ismétlődőként kezeli és csoportosítja.

A Linux számos speciális segédprogramot bocsát az Ön rendelkezésére. Sokukhoz hasonlóan az uniq sem olyan eszköz, amelyet minden nap használ.

Éppen ezért a Linuxban való jártasság megszerzésének nagy része az, hogy emlékezzen, melyik eszköz fogja megoldani az aktuális problémát, és hol találhatja meg újra. De ha gyakorolsz, jó úton haladsz.

Vagy mindig kereshet a How-To Geek-ben – valószínűleg van egy cikkünk róla.