abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 14:44 | IT novinky

    Námořní drony používané elitními jednotkami britského královského námořnictva tajně posílaly údaje do Číny. Stroje vybavené čínskými komponenty měly být využívány pro vojenské operace na Blízkém východě. Kamery na dálkově řízených průzkumných člunech K3 Scout byly vybavené součástkami, které bez vědomí britského námořnictva odesílaly informace do spojeného zařízení v Číně. Britské námořní síly využívaly flotilu námořních dronů

    … více »
    Ladislav Hagara | Komentářů: 2
    včera 13:33 | IT novinky

    Alza.cz nabízí herní AlzaPC s předinstalovaným Linuxem (YouTube), konkrétně s linuxovou distribucí Bazzite (Wikipedie).

    Ladislav Hagara | Komentářů: 4
    včera 04:55 | Nová verze

    Squeak (Wikipedie), open source implementace programovacího jazyka a prostředí Smalltalk, byl vydán ve verzi 6.1. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Bezpečnostní upozornění

    V Linuxu v KVM byla nalezena a v upstreamu již byla opravena kritická zranitelnost Zapscape aneb CVE-2026-64561. Root na hostovaném počítači (virtuální stroj) může obejít izolaci a získat plnou kontrolu nad hostitelským systémem (DoS útok nebo vzdálené spuštění kódu s právy roota). Na obou hlavních architekturách – Intel i AMD. Zranitelnost v Linuxu existovala 6 let (od července 2020 do července 2026).

    Ladislav Hagara | Komentářů: 0
    10.8. 19:00 | IT novinky

    Počítačová hra Knytt napsaná v Multimedia Fusion 2 byla vydána před 20 lety. Při této příležitosti byl dnes představen moderní port (YouTube) této plošinovky na současné operační systémy pod názvem Knytt Classic. Je zdarma k dispozici na Steamu a GOG.com.

    Ladislav Hagara | Komentářů: 0
    10.8. 16:00 | IT novinky

    Americká technologická společnost Meta Platforms představila nový model umělé inteligence (AI) Muse Glimmer. Model je menší než přední modely AI od konkurence a má běžet přímo na počítačích uživatelů. Meta model zpřístupní jako open source, tedy otevřený software. Nový model je navržen tak, aby zvládal takzvané agentní úkoly na počítačích se spotřebitelskou grafickou kartou. Klade si tak za cíl uspokojit poptávku po systémech AI, které běží přímo na zařízeních uživatelů.

    Ladislav Hagara | Komentářů: 8
    10.8. 12:11 | Pozvánky

    V pátek 28. srpna 2026 se v pražském Karlíně uskuteční již osmý Mobilní Hackday. Akce začne v 10:00 a potrvá až do večera. Setkání proběhne v prostorách SUSE Linux, s.r.o. na adrese Křižíkova 148/34, Praha 8 – Karlín. Nejbližší zastávkou je Křižíkova, kam se lze dostat tramvají i metrem. Na programu budou například novinky z posledních měsíců, možnosti, jak si zjednodušit práci s LLM/AI, a také nová linuxová distribuce BengalOS, včetně … více »

    David Heidelberg | Komentářů: 0
    9.8. 17:22 | Nová verze

    Jakub Vrána vydal Adminer ve verzi 6.0.0 s více než 130 změnami: "Většina změn vznikla s asistencí Claude Opus 5. Někteří lidi se bojí, že AI asistence může kód zamořit technickým dluhem. To je jistě pravda, pokud vývojář všechny změny bezduše odbouchne Enterem. Ale pokud si pořádně projde plán, vyjedná v něm změny a pak totéž udělá i s vygenerovaným kódem, kvalita kódu stoupne a technický dluh naopak klesne. Je to jako párové programování s

    … více »
    Ladislav Hagara | Komentářů: 2
    9.8. 12:44 | Nová verze

    Sam Aaron vydal novou major verzi 5.0.0 aplikace Sonic Pi (Wikipedie) určené také pro výuku programování pomocí skládání hudby. Přehled novinek na GitHubu. Instalovat lze také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    8.8. 04:44 | IT novinky

    U příležitosti 30. výročí vydání počítačové hry Quake byla vydána nová epizoda s názvem Dawn of the Machine (Steam).

    Ladislav Hagara | Komentářů: 8
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (18%)
     (30%)
     (6%)
     (6%)
     (2%)
     (15%)
     (23%)
    Celkem 2369 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Unixové nástroje – 7 (tr, cut, sort a uniq)

    6. 1. 2010 | David Watzke | Návody | 100004×

    V tomto díle si představíme pár nástrojů pro jednoduchou manipulaci s textem: tr pro nahrazování znaků, cut pro získání požadované části textu, sort pro řazení řádků a uniq pro odstranění opakujících se řádků.

    Obsah

    tr

    link

    tr je program sloužící k nahrazování skupiny znaků na vstupu jinými znaky na výstupu. Název vychází z anglického slova translate nebo transliterate, což znamená přeložit nebo přepsat. První systém, se kterým byl program dodán, je AT&T UNIX verze .

    Jelikož příkaz pracuje se standardním vstupem, tak mu na něj musíme něco předat, jinak se jen zdánlivě zasekne a bude čekat až do ukončení. Podívejme se na základní použití:

    # načte soubor.txt, nahradí všechny výskyty znaku „a“ za „b“
    # a upravený text vypíše na std. výstup
    tr a b < soubor.txt
    
    # provede následující nahrazení:
    # a -> b
    # b -> c
    # c -> a
    echo abccab | tr 'abc' 'bca'
    
    # výstup bude: bcaabc
    

    Užitečná je možnost nahrazování skupiny znaků.

    # nahradí malá písmena za velká (vypíše „ABCDEF“)
    echo abcdef | tr '[:lower:]' '[:upper:]'
    
    # odstraní z textu v souboru všechny číslice
    tr -d '[:digit:]' < "soubor.txt"
    

    Nyní si popíšeme standardní přepínače programu, které rozšiřují jeho možnosti.

    PřepínačVýznam
    -c Doplní skupinu hodnot danou prvním zadaným řetězcem.
    -C Doplní skupinu znaků danou prvním zadaným řetězcem.
    -d Odstraní všechny výskyty dané skupiny znaků.
    -s Nahradí skupinu stejných, po sobě jdoucích znaků.

    Takový popis je sám o sobě docela matoucí a jsou zde ještě další pravidla, takže si to celé předvedeme na příkladech.

    # odstraní všechny výskyty znaku „p“ (tj. vypíše „lama“)
    echo lampa | tr -d 'p'
    # totéž (funguje v bashi >=3, méně přenosné)
    tr -d 'p' <<< "lampa"
    
    # nahradí více mezer za sebou za jednu
    tr -s '[:space:]' < soubor.txt
    
    # po každém „slovu“ odřádkuje
    tr -cs "[:graph:]" "[\n*]" < ../seznam.txt
    
    # odstraní všechny znaky, kromě zadaných („a“, „b“, „c“, odřádkování a mezera)
    tr -dc 'abc\n ' < ~/x.log
    
    # odstraní všechny znaky, které nejsou v abecedě (kromě odřádkování)
    tr -dc '[:alpha:]\n' < soubor
    

    cut

    link

    cut je program sloužící k vytažení určitých částí z textu. Název vychází z anglického výrazu cut out, což znamená vyříznout.

    Program zpracovává každý řádek daných souborů a umí provádět následující tři operace:

    1. Přepínač -b (bytes) umožňuje vybrat z každého řádku rozsah bytů. Například 1-10. Zadáte-li jej spolu s přepínačem -n, rozsah se zarovná směrem dolů tak, aby se žádný znak nerozdělil. Nezadáte-li rozsah, ale jen počátek, např. 50-, znamená to od 50. bytu až na konec řádku.
    2. Přepínač -c (chars) dělá totéž jako -b, ale se znaky místo bytů.
    3. Přepínač -f (fields) udává, které sloupce jednotlivých řádků se vypíší. Výchozí oddělovač sloupců je (znak) tab. Změnit lze pomocí přepínače -d, kterému zadáte jiný znak.

    Předvedeme si to na ukázkách.

    # vypíše ze souboru každý řádek od jeho 50. bytu
    cut -b 50- soubor
    
    # vypíše ze souboru 3. až 10. znak každého řádku
    cut -c 3-10 soubor
    
    # vypíše 2. a 4. sloupec ze seznamu ve formátu CSV oddělovaném středníky
    cut -d ';' -f 2,4 seznamu.csv
    

    sort

    link

    sort je program, jehož účelem je seřadit řádky daných souborů. Název programu znamená česky seřadit, takže zde není třeba nic vysvětlovat.

    Základní použití je jednoduché:

    # seřadí řádky v souboru 1.txt na std. výstup
    sort 1.txt
    
    # spojí soubory 1.txt a 2.txt a seřadí řádky
    sort 1.txt 2.txt
    
    # samozřejmě umí pracovat i se std. vstupem;
    # sort dostane na vstup prvních 500 řádků ze souboru
    # „soubor.txt“ a seřadí je na výstup.
    head -n 500 soubor.txt | sort
    

    sort má docela velké množství přepínačů a jejich kompletní popis by vydal spolehlivě na samostatný článek, proto vyberu jen několik (subjektivně) zajímavých.

    Může se hodit přepínač -o (output, výstup), který slouží k určení umístění, kam se uloží výstup (místo standardního výstupu). Má jednu výhodu oproti přesměrování výstupu, a sice tu, že umožňuje zadat stejný soubor jako vstupní i výstupní.

    # tento příkaz si smaže soubor „pod rukama“ (!)
    sort soubor > soubor
    
    # toto je funkční a bezpečné (seřadí řádky v souboru)
    sort soubor -o soubor
    

    Jsou-li jednotlivé vstupní soubory již seřazené a vy je chcete pouze spojit (a výsledek mít seřazený), můžete přidat přepínač -m (merge, spojit). Výsledek bude stejný, ale ušetříte nějaký čas (přímo úměrně k velikosti souboru).

    # jsou-li vstupní soubory („A.txt“, „B.txt“, „C.txt“) seřazené,
    # spojí (a celkově seřadí) se do souboru „ABC.txt“
    sort -m A.txt B.txt C.txt -o ABC.txt
    

    Chcete-li soubor seřadit obráceně, poslouží vám přepínač -r (reverse, obráceně).

    sort -r "/mnt/storage5/soubor.txt" > vystup.txt
    

    Pokud se chcete zbavit opakujících se řádků, poslouží přepínač -u (unique, jedinečný), který vlastně dělá totéž, co níže popisovaný program uniq.

    # seřadí seznam a zbaví jej duplicitních záznamů
    sort "seznam.txt" | uniq > "serazeny-seznam.txt"
    
    # totéž bez použití uniq
    sort -uo "serazeny-seznam.txt" "seznam.txt"
    

    Potřebujeme-li seřadit výpis podle jiného sloupce, než je ten první, použijeme přepínač -k. Zadáme-li pouze jedno číslo, bude řadit od n-tého sloupce až do posledního (v případě potřeby, tj. pokud budou hodnoty na n-tém sloupci stejné). Proto je někdy vhodné za čárku dopsat číslo sloupce, u kterého se má s řazením přestat. Toto druhé číslo může být stejné jako první. Zadáme-li za číslo tečku a za ni jiné číslo (m), sort bude řadit podle m-tého znaku n-tého sloupce.

    # seřadí vstup podle druhého sloupce
    sort -k 2,2 << EOF
    1 b
    2 a
    EOF
    
    # seřadí řádky souboru podle druhého znaku řetězce
    # ve třetím sloupci
    sort -k 3.2,3.2 "soubor"
    

    Sloupce jsou v tomto případě oddělovány vždy prázdným místem (mezerami) mezi jednotlivými slovy. Ke změně oddělovače sloupců lze použít přepínač -t.

    sort -t ';' -k 3 "seznam.csv"
    

    Užitečný je často přepínač -n (numeric sort, numerické řazení), který aktivuje řazení dle číselné hodnoty. Lze samozřejmě kombinovat s ostatními přepínači.

    sort -n "soubor.txt"
    

    Tento program má skutečně široké možnosti, co se týče řazení řádků, proto potřebujete-li něco ještě konkrétnějšího, než jsem zde popsal, podívejte se do specifikace SUS (anglicky) nebo se zeptejte v diskuzi.


    uniq

    link

    uniq slouží primárně k filtrování stejných, po sobě jdoucích řádků tak, aby se opakovaný řádek vypsal pouze jednou. Příkaz se poprvé objevil v AT&T UNIXu verze 3. Název vychází patrně z anglického slova unique (jedinečný), protože to souvisí s jeho účelem – každý řádek je totiž po zpracování programem jedinečný (neopakuje se).

    Jelikož se duplicitní řádky odstraní jen tehdy, když spolu sousedí, často je žádoucí řádky nejdřív seřadit pomocí výše popisovaného programu sort. Ovšem použijete-li sort, pak už vám nic nebrání rovnou využít jeho přepínač -u a použití uniq se tak úplně vyhnout.

    # seřadí seznam a zbaví jej duplicitních záznamů
    sort "seznam.txt" | uniq > "serazeny-seznam.txt"
    
    # totéž bez použití uniq
    sort -uo "seznam.txt" "seznam.txt"
    

    Chování programu lze ovlivnit přepínači. Popíšeme si zde ty, které byly standardizovány.

    Přepínač Význam
    -c Před každý řádek vypíše číslo, signalizující po kolikáté se daný řádek opakuje. Tzn. neodstraňuje duplicity.
    -d Vypíše pouze opakující se řádky.
    -f n Ignoruje maximálně prvních n znaků, které odpovídají regulárnímu výrazu [[:blank:]]*[^[:blank:]]*. Pokud je n větší než skutečný počet těchto znaků, použije se pro porovnání prázdný řetězec.
    -s n Ignoruje prvních n znaků při porovnávání řádků.
    -u Řádky, které se opakují, nevypíše ani jednou.

    Jako vždy si přepínače předvedeme na ukázkách.

    # vypíše řádky, které se v souboru „x“ opakují
    sort "x" | uniq -d
    
    # vypíše před každý řádek číslo, kolikrát se opakoval
    uniq -c "seznam"
    
    # vypíše pouze řádky „1111“ a „3211“, protože první znak je ignorován a
    # tím pádem jsou první tři řádky považovány za stejné
    uniq -s 1 << EOS
    1111
    2111
    3111
    3211
    EOS
    
           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    6.1.2010 00:35 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    IMHO by bylo vhodnější u přepínačů -c, -C příkazu tr napsat spíš neguje než doplní. Přestože vím, co ty přepínače dělají, chvíli mi trvalo, než jsem pochopil, že "doplní" má znamenat "vezme doplněk".
    6.1.2010 11:08 Jirka P
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    Přesně tak, o "doplňování množiny" slyším dnes poprvé. Možná, kdyby autor skutečně trval na echt českých slovech, by se dalo říct "první množina je dopněk zadaných znaků".
    menphis avatar 6.1.2010 02:14 menphis | skóre: 22 | blog: menphis_blog
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    Super serial.
    6.1.2010 09:34 Uran | skóre: 9 | blog: uranit
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    Perfektni hlavne to trideni podle sloupcu/znaku u sort jsem dlouho hledal.
    Fill avatar 6.1.2010 09:55 Fill | skóre: 19 | blog: Fill | Třebíč
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    Moc pěkný.

    Např. jsem si léta (cca 10 :)) nevšiml přepínače -f u cut a pokaždé to lámal přes awk :).

    Dík.
    6.1.2010 15:00 Robo
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    hehe, no ja som to lamal este asi pred rokom cez sed, kym som objavil cut, ktory je daleko rychlejsi ;-)
    6.1.2010 10:11 vencas | skóre: 32
    Rozbalit Rozbalit vše cut delimiter \s+
    S cutem mám trochu problém, protože se mnu nedá říct, aby bral "libovolný počet whitespace" jako oddělovač; text zarovnaný ve sloupcích ho rozbije.
    6.1.2010 11:43 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: cut delimiter \s+
    To sice ne, ale dá se to obejít pomocí 'tr -s'.
    6.1.2010 17:55 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    Pozor na sort -u, v kombinaci s --key to není totéž jako uniq! A neodstraňuje to duplicitní řádky:
    bash$ sort --key 2 -u <<EOF
    > a a
    > b a
    > c a
    > EOF
    a a
    neboli uniq se týká jen klíče (popř klíčů), ne celé řádky. Někdy toho lze s výhodou využít.
    Amarok avatar 9.1.2010 15:08 Amarok | skóre: 33 | blog: blogoblog
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    Tenhle dil uz je hodne zajimavy, dik za nej.
    Vloudila se drobna chyba (oznacim tucne):
    # seřadí seznam a zbaví jej duplicitních záznamů
    sort "seznam.txt" | uniq > "serazeny-seznam.txt"
    
    # totéž bez použití uniq
    sort -uo "serazeny-seznam.txt" "seznam.txt"
    
    GNUniverse - May the source be with you...
    David Watzke avatar 9.1.2010 19:32 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Unixové nástroje – 7 (tr, cut, sort a uniq)
    Jo, to je pravda. Abych mohl tvrdit, že je to totéž, mělo by to být tak, jak píšeš. To, co jsem napsal já, seřadí soubor in-place.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.