v operačním systému Linux existuje mnoho nástrojů pro vyhledávání a generování sestavy z textových dat nebo souborů. Uživatel může snadno provádět mnoho typů vyhledávání, nahrazování a generování sestav pomocí příkazů awk, grep a sed. awk není jen příkaz. Jedná se o skriptovací jazyk, který lze použít jak z terminálu, tak ze souboru awk. Podporuje proměnnou, podmíněný příkaz, pole, smyčky atd. stejně jako ostatní skriptovací jazyky., Může číst libovolný řádek obsahu souboru po řádku a oddělit pole nebo sloupce na základě konkrétního oddělovače. Podporuje také regulární výraz pro vyhledávání konkrétního řetězce v textovém obsahu nebo souboru a podniká kroky, pokud se objeví nějaká shoda. Jak můžete použít příkaz awk a skript je zobrazen v tomto tutoriálu pomocí 20 užitečných příkladů.,

  • awk s csv data
  • awk regex
  • awk malá a velká písmena regex
  • awk s nf (number of fields) proměnná
  • awk gensub funkce ()
  • awk s rand() funkce
  • awk uživatelem definované funkce
  • awk, pokud
  • awk proměnné
  • awk pole
  • awk smyčky
  • awk tisk první sloupec
  • awk tisk poslední sloupec
  • awk s grep
  • awk s bash script file
  • awk sed s
  • Použití awk s printf

    printf() funkce se používá k formátování výstupu ve většině programovacích jazyků., Tuto funkci lze použít s příkazem awk pro generování různých typů formátovaných výstupů. příkaz awk se používá hlavně pro libovolný textový soubor. Vytvořte textový soubor s názvem zaměstnanec.txt s níže uvedeným obsahem, kde jsou pole oddělena kartou (‚\t‘).

    zaměstnanec.txt

    1001 John sena 40000
    1002 Jafar Iqbal 60000
    1003 Meher Nigar 30000
    1004 Jonny Jater 70000

    následující příkaz awk bude číst data od zaměstnanců.txt soubor řádek po řádku a vytisknout první soubor po formátování. Zde „%10s \ n “ znamená, že výstup bude dlouhý 10 znaků., Pokud je hodnota výstupu menší než 10 znaků, budou mezery přidány na přední straně hodnoty.

    $ awk ‚{ printf „%10s \ n“, $1 }‘ zaměstnanec.txt

    Výstup:

    Přejít na Obsah

    awk rozdělit na bílé místo

    výchozí slovo nebo pole oddělovač pro rozdělení jakéhokoli textu je bílé místo. příkaz awk může mít hodnotu textu jako vstup různými způsoby. Vstupní text je předán z příkazu echo v následujícím příkladu., Text „Líbí se mi programování“ bude ve výchozím nastavení rozdělen oddělovačem, mezerou a třetí slovo bude vytištěno jako výstup.

    $ echo ‚mám rád programování‘ | awk ‚{ print $3 }‘

    Výstup:

    Přejít na Obsah

    awk změnit oddělovač

    awk příkaz může být použit k změnit oddělovač pro soubor obsahu. Předpokládejme, že máte textový soubor s názvem telefon.txt s následujícím obsahem kde ‚: ‚se používá jako oddělovač pole obsahu souboru.

    telefon.,txt

    +123:334:889:778
    +880:1855:456:907
    +9:7777:38644:808

    Spusťte následující příkaz awk změnit oddělovač, ‚: ‚“ – “ obsah souboru, telefon.txt.

    $ cat phone.txt
    $ awk ‚$1= $ 1 ‚ FS=“:“ OFS= “ – “ telefon.txt

    Výstup:

    Přejít na Obsah

    awk s tabulátory data

    awk příkaz má mnoho vestavěných proměnných, které jsou použity k číst text různými způsoby. Dva z nich jsou FS a OFS., FS je oddělovač vstupního pole a OFS jsou proměnné oddělovače výstupního pole. Použití těchto proměnných jsou uvedeny v této části. Vytvořit kartu oddělený soubor s názvem vstup.txt s následujícím obsahem pro testování použití proměnných FS a OFS.

    vstup.txt

    na straně Klienta skriptovací jazyk
    Server-side skriptovací jazyk
    Databáze Serveru
    Webový Server

    Použití FS proměnné s tab

    následující příkaz rozdělí každý řádek vstupu.txt soubor založený na kartě (‚\t‘) a vytisknout první pole každého řádku.,

    $ awk ‚{ print $1 }‘ FS=’\t‘ input.txt

    Výstup:

    Použití OFS proměnné s tab

    následující příkaz awk bude tisknout 9. a 5. pole ‚ls-l‘ příkaz výstup s tab oddělovač po vytištění název sloupce „Název“ a „Velikost“. Zde se proměnná OFS používá k formátování výstupu pomocí karty.,

    $ ls-l
    $ ls-l | awk -v OFS=’\t‘ ‚BEGIN { printf „%s\t%s\n“, „Název“, „Velikost“} {print $9,$5}‘

    Výstup:

    Přejít na Obsah

    awk s CSV data

    obsah libovolného souboru CSV může být zpracován v několika způsoby pomocí awk příkaz. Vytvořte soubor CSV s názvem ‚ zákazník.csv ‚ s následujícím obsahem použít příkaz awk.

    zákazník.txt

    čtení jediného pole souboru CSV

    ‚-F‘ volba se používá s příkazem awk nastavit oddělovač pro rozdělení každý řádek souboru., Následující příkaz awk vytiskne název pole zákazníka.soubor csv.

    $ Cat customer.csv
    $ awk-F „,“ ‚{print $2}‘ zákazník.CSV

    výstup:

    čtení více polí kombinací s jiným textem

    následující příkaz vytiskne tři pole zákazníka.csv kombinací textu názvu, jména, e-mailu a telefonu. První řádek zákazníka.soubor csv obsahuje název každého pole. Nr proměnná obsahuje číslo řádku souboru, když příkaz awk analyzuje soubor., V tomto příkladu se proměnná NR používá k vynechání prvního řádku souboru. Výstup zobrazí 2., 3. a 4. pole všech řádků kromě prvního řádku.

    $ awk -F „,“ ‚NR>1 {print „Jméno:“ $2 „, Email:“ $3 „, Tel:“ $4}‘ zákazníka.csv

    Výstup:

    Čtení CSV souboru pomocí awk skript,

    awk skript může být proveden spuštěním awk soubor. Jak můžete vytvořit soubor awk a spustit soubor je uveden v tomto příkladu. Vytvořte soubor s názvem awkcsv.awk s následujícím kódem., Klíčové slovo BEGIN se používá ve skriptu pro informování příkazu awk k provedení skriptu počáteční části nejprve před provedením dalších úkolů. Zde se používá oddělovač polí (FS) pro definování oddělovače rozdělení a 2.a 1. pole budou vytištěna podle formátu použitého ve funkci printf ().

    awkcsv.awk
    BEGIN {FS =“,“} {printf „%5S (%s) \ n“, $2,$1}

    spustit awkcsv.awk soubor s obsahem zákazníka.soubor csv následujícím příkazem.

    $ awk-f awkcsv.zákazník awk.,csv

    Výstup:

    Přejít na Obsah

    awk regex

    regulární výraz je vzor, který se používá k vyhledání libovolného řetězce v textu. Různé typy složitých úkolů vyhledávání a nahrazování lze provést velmi snadno pomocí regulárního výrazu. Některé jednoduché použití regulárního výrazu s příkazem awk jsou uvedeny v této části.

    Odpovídající znaková sada

    následující příkaz bude odpovídat slovo Hlupák nebo bool, nebo v Pohodě s vstupní řetězec a tisk je-li slovo zakládá., Zde se panenka nebude shodovat a nebude tisknout.

    $ printf „Fool\nCool\nDoll\nbool“ | awk ‚/ool/‘

    Výstup:

    Hledat řetězec na začátku řádku

    ‚^‘ symbol se používá v regulárním výrazu do vyhledávání libovolný vzor na startovní linii. Slovo „Linux“ bude prohledáno na začátku každého řádku textu v následujícím příkladu. Zde dva řádky začínají textem „Linux“ a tyto dva řádky se zobrazí na výstupu.,

    $ echo -e „Linux je zdarma k použití\n To je open-source software\nLinuxHint
    populární blog site“ | awk ‚/^Linux/‘

    Výstup:

    Hledat řetězec na konci řádku

    ‚$‘ symbol se používá v regulární výraz pro hledání jakéhokoliv vzoru na konci každého řádku textu. Slovo „Script“ se vyhledává v následujícím příkladu. Zde dva řádky obsahují slovo, skript na konci řádku.,

    $ echo -e „PHP Script\nJavaScript\nVisual Programování“ | awk ‚/Script$/‘

    Výstup:

    Vyhledávání vynecháním konkrétní znaková sada

    ‚^‘ symbol označuje výchozí text, pokud je použit před každým string pattern ( ‚/ ^ … / ‚ ), nebo před jakoukoliv znakovou sadu deklarované ^. Pokud je uvnitř třetí závorky použit symbol’^‘, bude definovaná znaková sada uvnitř držáku v době vyhledávání vynechána., Následující příkaz prohledá jakékoli slovo, které nezačíná „F“, ale končí „ool“. Cool a bool budou vytištěny podle vzoru a textových dat.

    $ printf „Fool\nCool\nDoll\nbool“ | awk ‚/ool/‘

    Výstup:

    Přejít na Obsah

    awk malá a velká písmena regex

    ve výchozím nastavení, regulární výraz se malá a velká písmena vyhledávání, když hledáte nějaký vzor v řetězci. Případ necitlivé vyhledávání lze provést příkazem awk s regulárním výrazem., V následujícím příkladu se funkce tolower() používá k vyhledávání necitlivých na malá písmena. Zde bude první slovo každého řádku vstupního textu převedeno na malá písmena pomocí funkce tolower () a bude odpovídat vzoru regulárního výrazu. funkce toupper () může být také použita pro tento účel, v tomto případě musí být vzor definován všemi velkými písmeny. Text definovaný v následujícím příkladu obsahuje hledané slovo “ web “ ve dvou řádcích, které budou vytištěny jako výstup.,

    $ echo -e „Web Design\nweb rozvoje\nFramework“ | awk ‚tolower($0) ~ /^web/;‘

    Výstup:

    Přejít na Obsah

    awk s NF (number of fields) proměnná

    NF je vestavěné proměnné awk příkaz, který slouží k spočítat celkový počet polí v každém řádku vstupního textu. Vytvořte libovolný textový soubor s více řádky a více slovy. vstup.zde se používá soubor txt, který je vytvořen v předchozím příkladu.,

    pomocí NF z příkazového řádku

    zde se první příkaz používá k zobrazení obsahu vstupu.txt soubor a druhý příkaz se používá k zobrazení celkového počtu polí v každém řádku souboru pomocí proměnné NF.

    $ cat vstup.txt
    $ awk ‚{print NF}‘ vstup.txt

    výstup:

    pomocí NF v awk souboru

    Vytvořte awk soubor s názvem count.awk se skriptem uvedeným níže. Když se tento skript spustí s libovolnými textovými daty, bude jako výstup vytištěn každý obsah řádku s celkovými poli.

    počítat.,awk

    {print $0}
    {print““}

    spusťte skript následujícím příkazem.

    $ awk-F count.awk vstup.txt

    Výstup:

    Přejít na Obsah

    awk gensub() funkce

    getsub() je nahrazování funkce, která se používá k hledání řetězec na základě konkrétní oddělovač nebo regulární výraz. Tato funkce je definována v balíčku „gawk“, který není ve výchozím nastavení nainstalován. Syntaxe této funkce je uvedena níže., První parametr obsahuje regulární výraz vzor nebo vyhledávání oddělovač, Druhý parametr obsahuje náhradní text, třetí parametr udává, jak vyhledávání bude provedeno, a poslední parametr obsahuje text, v němž bude tato funkce použita.

    Syntaxe:

    gensub(regexp, náhrada, jak )

    Spusťte následující příkaz k instalaci zírat balíček pro použití getsub() funkce s awk příkaz.

    $ sudo apt-get install zírat

    Vytvořte textový soubor s názvem ‚salesinfo.,txt ‚ s následujícím obsahem pro procvičení tohoto příkladu. Zde jsou pole oddělena kartou.

    salesinfo.txt

    Mon 700000
    Tue 800000
    Wed 750000
    Thu 200000
    Fri 430000
    Sat 820000

    Spusťte následující příkaz ke čtení číselných polí salesinfo.txt soubor a vytisknout celkovou částku prodeje. Zde třetí parametr “ G “ označuje globální vyhledávání. To znamená, že vzor bude prohledán v plném obsahu souboru.,

    $ awk ‚{ x=gensub(„\t“,““,“G“,$2); printf x „+“ } END{ print 0 }‘ salesinfo.txt | bc-l

    Výstup:

    Přejít na Obsah

    awk s rand() funkce

    rand() funkce se používá pro generování náhodné číslo větší než 0 a menší než 1. Takže bude vždy generovat zlomkové číslo menší než 1. Následující příkaz vygeneruje zlomkové náhodné číslo a vynásobí hodnotu 10, aby získal číslo více než 1., Pro použití funkce printf() bude vytištěno zlomkové číslo se dvěma číslicemi za desetinnou čárkou. Pokud spustíte následující příkaz vícekrát, dostanete pokaždé jiný výstup.

    $ awk ‚BEGIN {printf“ číslo je =%.2f\n“ , rand()*10}‘

    Výstup:

    Přejít na Obsah

    awk uživatelem definované funkce

    Všechny funkce, které jsou použity v předchozích příkladech jsou vestavěné funkce. Můžete však deklarovat uživatelem definovanou funkci ve skriptu awk, abyste provedli jakýkoli konkrétní úkol., Předpokládejme, že chcete vytvořit vlastní funkci pro výpočet plochy obdélníku. Chcete-li tento úkol provést, vytvořte soubor s názvem ‚oblast.awk ‚ s následujícím skriptem. V tomto příkladu je ve skriptu deklarována uživatelem definovaná funkce s názvem area (), která vypočítá oblast na základě vstupních parametrů a vrátí hodnotu plochy. příkaz getline se zde používá k převzetí vstupu od uživatele.

    oblast.awk

    spusťte skript.

    $ awk-F area.,awk

    Výstup:

    Přejít na Obsah

    awk-li příklad

    awk podporuje podmíněné příkazy, jako jiné standardní programovací jazyky. Tři typy if prohlášení jsou uvedeny v této části pomocí tří příkladů. Vytvořte textový soubor s názvem položky.txt s následujícím obsahem.

    položky.txt

    HDD Samsung $100
    Myš A4Tech
    Tiskárna HP $200

    Jednoduché, pokud například:

    že následující příkaz se bude číst obsah položky.txt soubor a zkontrolujte hodnotu pole 3rd v každém řádku., Pokud je hodnota prázdná, vytiskne chybovou zprávu s číslem řádku.

    $ awk ‚{ if ($3 == „“) print „cenové pole chybí v řádku“ Nr }‘ položky.txt

    Výstup:

    if-else příklad:

    následující příkaz vypíše položku cenu, pokud 3. pole existuje v řadě, jinak to bude tisknout chybová zpráva.

    $ awk ‚{ if ($3 == „“) print „Cena pole chybí“
    else print „cena položky je“ $3 }‘ položky.,txt

    Výstup:

    if-else-if příklad:

    Když následující příkaz se bude provádět z terminálu, pak to bude brát vstup od uživatele. Vstupní hodnota bude porovnána s každou podmínkou if, dokud nebude podmínka pravdivá. Pokud se nějaká podmínka stane pravdivou, vytiskne odpovídající známku. Pokud se vstupní hodnota neshoduje s žádným stavem, vytiskne selhání.,

    $ awk ‚BEGIN { print „Zadejte známku:“
    getline značku < „-„
    , pokud (značku >= 90) print „A+“
    jinak pokud( značku >= 80) print „“
    jinak pokud( značku >= 70) print „B+“
    else print „Fail“ }‘

    Výstup:

    Přejít na Obsah

    awk proměnné

    deklarace proměnné awk je podobná deklaraci proměnné prostředí. Existuje rozdíl ve čtení hodnoty proměnné., pro čtení hodnoty se používá symbol ‚ $ ‚ s názvem proměnné shellu. Ale není třeba používat ‚$‘ s awk proměnnou číst hodnotu.

    pomocí jednoduché proměnné:

    následující příkaz prohlásí proměnnou s názvem “ web “ a k této proměnné je přiřazena hodnota řetězce. Hodnota proměnné je vytištěna v dalším příkazu.

    $ awk ‚BEGIN{ site=“ LinuxHint.,com“; tisk stránky}‘

    Výstup:

    Použití proměnné k načtení dat ze souboru

    následující příkaz bude hledat slovo „Tiskárnou“ v souboru položek.txt. Pokud některý řádek souboru začíná „tiskárnou“, uloží hodnotu 1., 2. a 3. pole do tří proměnných. jméno a cena proměnné budou vytištěny.

    $ awk ‚/Tiskárny/ { name=$1;značka=$2;cena=$3;print „item name=“ jméno;
    print „položky cena=“ cena }‘ položky.,txt

    Výstup:

    Přejít na Obsah

    awk pole

    Oba číselné a související pole mohou být použity v awk. Deklarace proměnné pole v awk je stejná jako v jiných programovacích jazycích. Některá použití polí jsou uvedena v této části.

    asociativní pole:

    index pole bude libovolný řetězec pro asociativní pole. V tomto příkladu je deklarováno a vytištěno asociativní pole tří prvků.,

    výstup:

    číselné pole:

    číselné pole tří prvků je deklarováno a vytištěno oddělením karty.

    Výstup:

    Přejít na Obsah

    awk smyčky

    Tři typy smyček jsou podporovány awk. Použití těchto smyček jsou zde zobrazeny pomocí tří příkladů.

    zatímco smyčka:

    zatímco smyčka, která se používá v následujícím příkazu, bude opakovat 5krát a ukončí smyčku pro příkaz break.,

    $ awk ‚BEGIN { n = 1; while (n <= 10) { if(n > 5) break; tisk n; n++ } }‘

    Výstup:

    Pro smyčce:

    Pro smyčky, která se používá v následujících awk příkaz vypočítá součet od 1 do 10 a vytisknout hodnotu.,

    $ awk ‚BEGIN { sum=0; for (n = 1; n <= 10; n++) suma=suma+n; print sum }‘

    Výstup:

    Do-zatímco smyčka:

    do-while s následující příkaz vypíše všechna sudá čísla od 10 k 5.,

    $ awk ‚BEGIN {counter = 10; { if (čítač%2 ==0) print pult, counter– }
    while (counter >, 5) }‘

    Výstup:

    Přejít na Obsah

    awk tisk první sloupec

    prvním sloupci soubor lze vytisknout pomocí $1 proměnné v awk. Pokud však hodnota prvního sloupce obsahuje více slov, vytiskne se pouze první slovo prvního sloupce. Pomocí konkrétního oddělovače lze první sloupec vytisknout správně. Vytvořte textový soubor s názvem studenti.,txt s následujícím obsahem. Zde první sloupec obsahuje text dvou slov.

    studenti.,txt

    Kaniz Fatema 30<sup>th</sup> batch
    Abir Hossain 35<sup>th</sup> batch
    John Abraham 40<sup>th</sup> batch

    Run awk command without any delimiter. The first part of the first column will be printed.,

    $ awk ‚{print $1}‘ studenti.txt

    Spusťte příkaz awk s následujícím oddělovačem. Celá část prvního sloupce bude vytištěna.

    $ awk-F ‚\s\s‘ ‚{print $1}‘ studenti.txt

    Výstup:

    Přejít na Obsah

    awk tisk poslední sloupec

    $(NF) proměnné mohou být použity pro tisk posledním sloupci soubor. Následující příkazy awk vytisknou poslední část a plnou část posledního sloupce studentů.txt soubor.,

    $ awk ‚{print $(NF)}‘ studenti.txt
    $ awk-F ‚\\s\s‘ ‚{print $(NF)}‘ studenti.txt

    Výstup:

    Přejít na Obsah

    awk s grep

    grep je další užitečný příkaz Linux pro vyhledávání obsahu v souboru na základě nějaké regulární výraz. Jak mohou být příkazy awk i grep použity společně, je uvedeno v následujícím příkladu. příkaz grep se používá k vyhledávání informací o id zaměstnance, „1002“ od zaměstnance.txt soubor. Výstup příkazu grep bude odeslán do awk jako vstupní data., 5% bonus bude počítán a vytištěn na základě platu id zaměstnance, „1002“ příkazem awk.

    $ Cat zaměstnanec.txt
    $ grep ‚1002‘ zaměstnanec.txt | awk -F ‚\t‘ ‚{ print $2 „, bude se $“ ($3*5)/100 „bonus“}‘

    Výstup:

    Přejít na Obsah

    awk s BASH souboru

    stejně Jako ostatní Linux příkaz, awk příkaz může být také použit v BASH skript. Vytvořte textový soubor s názvem zákazníci.txt s následujícím obsahem. Každý řádek tohoto souboru obsahuje informace o čtyřech polích., Jedná se o ID zákazníka, jméno, adresu a mobilní číslo, které jsou odděleny’/‘.

    zákazníci.txt

    Vytvořte soubor bash s názvem item_search.bash s následujícím skriptem. Podle tohoto skriptu bude hodnota státu převzata od uživatele a prohledána u zákazníků.txt soubor příkazem grep a předán příkazu awk jako vstup. Příkaz Awk přečte 2. a 4. pole každého řádku. Pokud se vstupní hodnota shoduje s libovolnou stavovou hodnotou zákazníků.txt soubor pak vytiskne jméno zákazníka a mobilní číslo, jinak vytiskne zprávu „nebyl nalezen žádný zákazník“.,

    item_search.bash

    Spusťte následující příkazy pro zobrazení výstupů.

    $ Cat zákazníci.txt
    $ bash item_search.bash

    Výstup:

    Přejít na Obsah

    awk sed s

    Další užitečný nástroj pro vyhledávání Linuxu je sed. Tento příkaz lze použít jak pro vyhledávání, tak pro nahrazení textu libovolného souboru. Následující příklad ukazuje použití příkazu awk s příkazem sed. Zde, příkaz sed prohledá všechna jména zaměstnanců začíná ‚ J ‚ a předá příkaz awk jako vstup., awk vytiskne jméno a ID zaměstnance po formátování.

    $ Cat zaměstnanec.txt
    $ sed-n ‚/j/p‘ zaměstnanec.txt | awk -F ‚\t‘ ‚{ printf „%s(%s)\n“, $2, $1 }‘

    Výstup:

    Přejít na Obsah

    Závěr:

    můžete použít awk příkaz vytvořit různé typy zpráv na základě nějaké tabulky nebo s oddělovači údajů po filtrování dat správně. Doufám, že se budete moci naučit, jak funguje příkaz awk po procvičení příkladů uvedených v tomto tutoriálu.

    Articles

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *