Páni

Jak rozdělit soubor řetězců pomocí Awk

Jak rozdělit soubor řetězců pomocí Awk
Příkaz Linux awk (zkráceně od jmen vývojářů; Aho, Weinberger a Kernighan) je skvělý způsob, jak zpracovat a analyzovat soubor řetězců. Aby byly soubory informativní, musí být uspořádány ve formě řádků a sloupců. Potom můžete použít awk u těchto souborů k:

V tomto článku vysvětlíme základní použití příkazu awk a jeho použití k rozdělení souboru řetězců. Ukázky z tohoto článku jsme provedli na systému Debian 10 Buster, ale lze je snadno replikovat na většině linuxových distribucí.

Ukázkový soubor, který použijeme

Ukázkový soubor řetězců, které budeme používat k demonstraci použití příkazu awk, je následující:

To naznačuje každý sloupec ukázkového souboru:

Příklad 1: Pomocí Awk vytisknete všechny řádky souboru

Tisk každého řádku zadaného souboru je výchozím chováním příkazu awk. V následující syntaxi příkazu awk neurčujeme žádný vzor, ​​který by awk měl tisknout, proto má příkaz použít akci „tisk“ na všechny řádky souboru.

Syntax:

$ awk 'print' název souboru.txt

Příklad:

V tomto příkladu říkám příkazu awk, aby tiskl obsah mého ukázkového souboru řádek po řádku.

$ awk 'print' sample_file.txt

Příklad 2: Pomocí awk vytisknete pouze řádky, které odpovídají danému vzoru

Pomocí awk můžete určit vzor a příkaz vytiskne pouze řádky odpovídající tomuto vzoru.

Syntax:

$ awk '/ pattern_to_be_matched / print' název souboru.txt

Příklad:

Ze vzorového souboru, pokud chci vytisknout pouze řádky, které obsahují proměnnou 'B', mohu použít následující příkaz:

$ awk '/ B / print' sample_file.txt

Aby byl příklad smysluplnější, dovolte mi vytisknout pouze informace o zaměstnancích, kteří jsou „profesorem“.

$ awk '/ professor / print' sample_file.txt

Příkaz vytiskne pouze řádky / položky, které obsahují řetězec „professor“, takže z dat máme cennější informace.

Příklad 3. Použijte awk k rozdělení souboru tak, aby se tiskla pouze konkrétní pole / sloupce

Místo tisku celého souboru můžete udělat awk, aby tiskl pouze konkrétní sloupce souboru. Awk ve výchozím nastavení považuje všechna slova oddělená mezerou v řádku za záznam sloupce. Ukládá záznam do proměnné $ N. Kde $ 1 představuje první slovo, $ 2 ukládá druhé slovo, $ 3 čtvrté atd. $ 0 ukládá celý řádek, takže se vytiskne řádek who, jak je vysvětleno v příkladu 1.

Syntax:

$ awk 'tisknout $ N,… .' název souboru.txt

Příklad:

Následující příkaz vytiskne pouze první sloupec (název) a druhý sloupec (předmět) mého ukázkového souboru:

$ awk 'print $ 1, $ 2' sample_file.txt

Příklad 4: Pomocí Awk spočítejte a vytiskněte počet řádků, ve kterých je vzor shodný

Můžete říct awk, aby spočítal počet řádků, ve kterých se shoduje zadaný vzor, ​​a poté vygenerovat tento 'počet'.

Syntax:

$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'
název souboru.txt

Příklad:

V tomto příkladu chci spočítat počet osob vyučujících předmět „anglicky“. Proto povím příkazu awk, aby odpovídal vzoru „anglicky“ a vytiskl počet řádků, ve kterých je tento vzor shodný.

$ awk '/ english / ++ cnt END print "Count =", cnt' sample_file.txt

Počet zde naznačuje, že 2 lidé učí angličtinu ze záznamů ukázkových souborů.

Příklad 5: Pomocí awk vytisknete pouze řádky s více než určitým počtem znaků

U tohoto úkolu použijeme vestavěnou funkci awk nazvanou „délka“. Tato funkce vrací délku vstupního řetězce. Pokud tedy chceme, aby awk tiskl pouze řádky s větším nebo dokonce menším počtem znaků, můžeme použít délkovou funkci následujícím způsobem:

Pro tisk řádků se znaky většími než číslo:

$ awk 'length ($ 0)> n' název souboru.txt

Pro tisk řádků se znaky menšími než číslo:

$ awk 'length ($ 0) < n' filename.txt

Kde n je počet znaků, který chcete pro řádek zadat.

Příklad:

Následující příkaz vytiskne pouze řádky z mého ukázkového souboru, které mají znaky více než 30:

$ awk 'length ($ 0)> 30' sample_file.txt

Příklad 6: Použijte awk k uložení výstupu příkazu do jiného souboru

Pomocí operátoru přesměrování '>' můžete pomocí příkazu awk vytisknout jeho výstup do jiného souboru. Takto jej můžete použít:

$ awk'kritéria_to_tisk "název souboru.txt> výstupní soubor.txt

Příklad:

V tomto příkladu použiji operátor přesměrování s mým příkazem awk k vytištění pouze jmen zaměstnanců (sloupec 1) do nového souboru:

$ awk 'print $ 1' sample_file.txt> jména zaměstnanců.txt

Prostřednictvím příkazů kočky jsem ověřil, že nový soubor obsahuje pouze jména zaměstnanců.

Příklad 7: Použijte awk k tisku pouze neprázdných řádků ze souboru

Awk má několik předdefinovaných příkazů, které můžete použít k filtrování výstupu. Například příkaz NF se používá k udržení počtu polí v aktuálním vstupním záznamu. Zde použijeme příkaz NF k tisku pouze neprázdných řádků souboru:

$ awk 'NF> 0' sample_file.txt

Je zřejmé, že k tisku prázdných řádků můžete použít následující příkaz:

$ awk 'NF < 0' sample_file.txt

Příklad 8: Pomocí awk spočítejte celkový počet řádků v souboru

Další vestavěná funkce zvaná NR udržuje počet vstupních záznamů (obvykle řádků) daného souboru. Tuto funkci můžete použít v awk následujícím způsobem k spočítání počtu řádků v souboru:

$ awk 'END print NR' sample_file.txt

To byly základní informace, které potřebujete k rozdělení souborů pomocí příkazu awk. Kombinaci těchto příkladů můžete použít k načtení smysluplnějších informací ze souboru řetězců pomocí awk.

Hry Nejlepší hry z příkazového řádku pro Linux
Nejlepší hry z příkazového řádku pro Linux
Příkazový řádek není při používání Linuxu jen vaším největším spojencem - může být také zdrojem zábavy, protože jej můžete použít k hraní mnoha zábavn...
Hry Nejlepší aplikace pro mapování gamepadu pro Linux
Nejlepší aplikace pro mapování gamepadu pro Linux
Pokud rádi hrajete hry na Linuxu s gamepadem místo typického vstupního systému pro klávesnici a myš, máte k dispozici několik užitečných aplikací. Mno...
Hry Užitečné nástroje pro hráče Linuxu
Užitečné nástroje pro hráče Linuxu
Pokud rádi hrajete hry na Linuxu, je pravděpodobné, že jste ke zlepšení herního zážitku použili aplikace a nástroje jako Wine, Lutris a OBS Studio. Kr...