20 awk příkladů

20 Awk Examples



V operačním systému Linux existuje mnoho nástrojů pro vyhledávání a generování zpráv z textových dat nebo souborů. Pomocí příkazů awk, grep a sed může uživatel snadno provádět mnoho typů úloh hledání, nahrazování a generování sestav. awk není jen příkaz. Je to skriptovací jazyk, který lze použít jak z terminálu, tak ze souboru awk. Podporuje proměnné, podmíněné příkazy, pole, smyčky atd. Jako jiné skriptovací jazyky. Může číst libovolný obsah souboru řádek 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 provádí akce, pokud je nalezena shoda. Jak můžete použít příkaz a skript awk, je v tomto kurzu ukázáno pomocí 20 užitečných příkladů.

Obsah:

  1. awk s printf
  2. awk rozdělit na bílé místo
  3. awk pro změnu oddělovače
  4. awk s daty oddělenými tabulátory
  5. awk s daty CSV
  6. awk regex
  7. awk případ necitlivý na regex
  8. awk s proměnnou nf (počet polí)
  9. awk funkce gensub ()
  10. awk s funkcí rand ()
  11. awk uživatelsky definovaná funkce
  12. awk kdyby
  13. awk proměnné
  14. awk pole
  15. awk smyčka
  16. awk k vytištění prvního sloupce
  17. awk k vytištění posledního sloupce
  18. awk s grep
  19. awk se souborem skriptu bash
  20. awk se sed

Použití awk s printf

printf () funkce se používá k formátování jakéhokoli výstupu ve většině programovacích jazyků. Tuto funkci lze použít s awk příkaz ke generování různých typů formátovaných výstupů. awk příkaz používaný hlavně pro jakýkoli textový soubor. Vytvořte textový soubor s názvem employee.txt s níže uvedeným obsahem, kde jsou pole oddělena tabulátorem („ t“).







employee.txt



1001 John sena 40 000
1002 Jafar Iqbal 60 000
1003 Meher Nigar 30 000
1004 Jonny Liver 70000

Následující příkaz awk bude číst data z employee.txt soubor řádek po řádku a vytiskněte první soubor po formátování. Tady, %10 s n znamená, že výstup bude mít 10 znaků. Pokud je hodnota výstupu menší než 10 znaků, mezery se přidají na začátek hodnoty.



$ awk'{printf'%10 s n', $ 1}'zaměstnanec.txt

Výstup:





Přejít na obsah



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

Výchozí oddělovač slov nebo polí pro rozdělení jakéhokoli textu je prázdné místo. Příkaz awk může přijímat textovou hodnotu jako vstup různými způsoby. Vstupní text je předáván z vyhodil v následujícím příkladu. Text, ' Rád programuji ‘Budou rozděleny podle výchozího oddělovače, prostor , a třetí slovo bude vytištěno jako výstup.

$vyhodil „Rád programuji“ | awk '{print $ 3}'

Výstup:

Přejít na obsah

awk pro změnu oddělovače

Příkaz awk lze použít ke změně oddělovače pro jakýkoli obsah souboru. Předpokládejme, že máte textový soubor s názvem phone.txt s následujícím obsahem, kde je jako oddělovač obsahu souboru použit znak „:“.

phone.txt

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

Chcete -li změnit oddělovač, spusťte následující příkaz awk, ':' podle '-' k obsahu souboru, phone.txt .

$ cat phone.txt
$ awk '$ 1 = $ 1' FS = ':' OFS = '-' phone.txt

Výstup:

Přejít na obsah

awk s daty oddělenými tabulátory

Příkaz awk má mnoho vestavěných proměnných, které se používají ke čtení textu různými způsoby. Dva z nich jsou FS a OFS . FS je oddělovač vstupního pole a OFS je proměnná oddělovače výstupního pole. Použití těchto proměnných je uvedeno v této části. Vytvořit tab oddělený soubor pojmenovaný input.txt s následujícím obsahem k otestování použití FS a OFS proměnné.

Input.txt

Skriptovací jazyk na straně klienta
Serverový skriptovací jazyk
Databázový server
Webový server

Použití proměnné FS s tab

Následující příkaz rozdělí každý řádek souboru input.txt soubor založený na kartě („ t“) a vytiskněte první pole každého řádku.

$awk '{print $ 1}' FS=' t'input.txt

Výstup:

Použití proměnné OFS s tab

Následující příkaz awk vytiskne soubor 9th a 5th pole „Ls -l“ výstup příkazu s oddělovačem tabulek po vytištění názvu sloupce název a Velikost . Tady, OFS proměnná slouží k formátování výstupu pomocí karty.

$ls -ten
$ls -ten | awk -proti OFS=' t' 'BEGIN {printf'%s t%s n ',' Name ',' Size '} {print $ 9, $ 5}'

Výstup:

Přejít na obsah

awk s daty CSV

Obsah libovolného souboru CSV lze analyzovat několika způsoby pomocí příkazu awk. Vytvořte soubor CSV s názvem „ customer.csv “S následujícím obsahem pro použití příkazu awk.

customer.txt

Id, jméno, e -mail, telefon
1, Sophia, [email protected], (862) 478-7263
2, Amelia, [email protected], (530) 764-8000
3, Emma, ​​[chráněno emailem], (542) 986-2390

Čtení jednoho pole souboru CSV

'-F' volba se používá s příkazem awk k nastavení oddělovače pro rozdělení každého řádku souboru. Následující příkaz awk vytiskne soubor název pole zákazník.csv soubor.

$kočkacustomer.csv
$awk -F ',' '{print $ 2}'customer.csv

Výstup:

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

Následující příkaz vytiskne tři pole customer.csv spojením textu nadpisu, Jméno, e -mail a telefon . První řádek souboru customer.csv soubor obsahuje název každého pole. NE proměnná obsahuje číslo řádku souboru, když příkaz awk soubor analyzuje. V tomto případě NR proměnná slouží k vynechání prvního řádku souboru. Na výstupu se zobrazí 2nd, 3rda 4thpole všech řádků kromě prvního řádku.

$awk -F ',' 'NR> 1 {print' Jméno: '$ 2', E -mail: '$ 3', Telefon: '$ 4}'customer.csv

Výstup:

Čtení souboru CSV pomocí awk skriptu

awk skript lze spustit spuštěním awk souboru. V tomto příkladu je znázorněno, jak můžete vytvořit soubor awk a spustit jej. Vytvořte soubor s názvem awkcsv.awk s následujícím kódem. ZAČÍT klíčové slovo se ve skriptu používá k informování příkazu awk ke spuštění skriptu souboru ZAČÍT část před provedením dalších úkolů. Zde oddělovač polí ( FS ) se používá k definování oddělovače rozdělení a 2nda 1Svatýpole se vytisknou podle formátu použitého ve funkci printf ().

awkcsv.awk
ZAČÍT{FS= ','} { printf '% 5s (% s) n',$2,$1}

Běh awkcsv.awk soubor s obsahem zákazník.csv soubor následujícím příkazem.

$awk -Fawkcsv.awk customer.csv

Výstup:

Přejít na obsah

awk regex

Regulární výraz je vzor, ​​který se používá k vyhledávání libovolného řetězce v textu. Různé typy komplikovaných úloh hledání a nahrazování lze provádět velmi snadno pomocí regulárního výrazu. V této části je ukázáno několik jednoduchých použití regulárního výrazu pomocí příkazu awk.

Odpovídající postavasoubor

Následující příkaz bude odpovídat slovu Blázen nebo bool nebo Chladný se vstupním řetězcem a vytiskněte, pokud se slovo najde. Tady, Panenka nebude odpovídat a nevytiskne se.

$printf 'Blázen nChladný nPanenka nbool ' | awk '/[FbC] ool/'

Výstup:

Vyhledávací řetězec na začátku řádku

'^' symbol se používá v regulárním výrazu k vyhledávání jakéhokoli vzoru na začátku řádku. ' Linux ‘ slovo 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í ve výstupu.

$vyhodil -A „Linux je zdarma k použití nJedná se o software s otevřeným zdrojovým kódem nLinuxHint je
oblíbený blog '
| awk '/^Linux/'

Výstup:

Vyhledávací řetězec na konci řádku

'$' symbol se používá v regulárním výrazu k vyhledávání jakéhokoli vzoru na konci každého řádku textu. ' Skript ‘Slovo se hledá v následujícím příkladu. Zde dva řádky obsahují slovo, Skript na konci řádku.

$vyhodil -A 'PHP skript nJavaScript nVizuální programování ' | awk '/Skript $/'

Výstup:

Hledání s vynecháním konkrétní znakové sady

'^' symbol označuje začátek textu, pokud je použit před jakýmkoli vzorem řetězce („ / ^… /“) nebo před jakoukoli znakovou sadou deklarovanou ^ […] . Pokud '^' symbol se používá uvnitř třetí závorky, [^…], pak bude definovaná znaková sada uvnitř závorky při vyhledávání vynechána. Následující příkaz prohledá každé slovo, které nezačíná 'F' ale končící „ ool '. Chladný a bool budou vytištěny podle vzoru a textových dat.

$ printf 'Blázen nChladný nPanenka nbool ' |awk' / [^ F] ool /'

Výstup:

Přejít na obsah

awk případ necitlivý na regex

Ve výchozím nastavení regulární výraz hledá velká a malá písmena při hledání jakéhokoli vzoru v řetězci. Hledání bez rozlišování malých a velkých písmen lze provést příkazem awk s regulárním výrazem. V následujícím příkladu snížit() funkce se používá k vyhledávání bez rozlišování malých a velkých písmen. Zde bude první slovo každého řádku vstupního textu převedeno na malá písmena pomocí snížit() fungovat a odpovídat vzoru pravidelných výrazů. toupper () K tomuto účelu lze také použít funkci, v tomto případě musí být vzor definován celým velkým písmenem. 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.

$vyhodil -A 'Webový design nvývoj webu nRámec' | awk 'tolower ($ 0) ~ /^web /;'

Výstup:

Přejít na obsah

awk s proměnnou NF (počet polí)

NF je vestavěná proměnná příkazu awk, která se používá k počítání celkového počtu polí v každém řádku vstupního textu. Vytvořte libovolný textový soubor s více řádky a více slovy. soubor input.txt Zde je použit soubor, který je vytvořen v předchozím příkladu.

Použití NF z příkazového řádku

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

$ cat input.txt
$ awk '{print NF}' input.txt

Výstup:

Použití 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, pak se jako výstup vytiskne obsah každého řádku s celkovými poli.

count.awk

{tisk $0}
{tisk'[Celkem polí:'NF']'}

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

$awk -Fcount.awk input.txt

Výstup:

Přejít na obsah

awk funkce gensub ()

getsub () je substituční funkce, která se používá k vyhledávání řetězců na základě konkrétního oddělovače nebo vzoru pravidelného výrazu. Tato funkce je definována v „Zírat“ balíček, který není ve výchozím nastavení nainstalován. Syntaxe této funkce je uvedena níže. První parametr obsahuje vzor regulárního výrazu nebo oddělovač vyhledávání, druhý parametr obsahuje náhradní text, třetí parametr udává, jak bude vyhledávání prováděno, a poslední parametr obsahuje text, ve kterém bude tato funkce použita.

Syntax:

gensub(regexp, náhrada, jak[, cílová])

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

$ sudo apt-get install gawk

Vytvořte textový soubor s názvem „ salesinfo.txt “S následujícím obsahem k procvičení tohoto příkladu. Zde jsou pole oddělena záložkou.

salesinfo.txt

Moje 700 000
Vaše 800 000
Středa 750000
Sbírejte 200 000
Pá 430000
So 820000

Spusťte následující příkaz a přečtěte si numerická pole salesinfo.txt soubor a vytiskněte součet všech částek prodeje. Zde třetí parametr „G“ označuje globální vyhledávání. To znamená, že vzor bude prohledáván v plném obsahu souboru.

$awk '{x = gensub (' t ',' ',' G ', $ 2); printf x '+'} END {print 0} 'salesinfo.txt| před naším letopočtem -ten

Výstup:

Přejít na obsah

awk s funkcí rand ()

řádek() funkce se používá ke generování libovolného náhodného čísla většího než 0 a menšího než 1. Takže vždy vygeneruje zlomkové číslo menší než 1. Následující příkaz vygeneruje zlomkové náhodné číslo a vynásobí hodnotu číslem 10 a získá číslo větší 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, získáte pokaždé jiný výstup.

$awk 'BEGIN {printf' Číslo je =%. 2f n ', rand ()*10}'

Výstup:

Přejít na obsah

awk uživatelsky 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živatelsky definovanou funkci ve skriptu awk k provedení jakéhokoli konkrétního úkolu. 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 „ area.awk “S následujícím skriptem. V tomto příkladu uživatelem definovaná funkce s názvem plocha() je deklarován ve skriptu, který vypočítá oblast na základě vstupních parametrů a vrátí hodnotu oblasti. getline Zde se používá příkaz k převzetí vstupu od uživatele.

area.awk

# Vypočítejte plochu
funkceplocha(výška,šířka){
vrátit sevýška*šířka
}

# Zahájí provádění
ZAČÍT{
tisk'Zadejte hodnotu výšky:'
getline h< '-'
tisk'Zadejte hodnotu width:'
getline w< '-'
tisk'Area ='plocha(h,v)
}

Spusťte skript.

$awk -Farea.awk

Výstup:

Přejít na obsah

awk if příklad

awk podporuje podmíněné příkazy jako ostatní standardní programovací jazyky. V této části jsou uvedeny tři typy příkazů if pomocí tří příkladů. Vytvořte textový soubor s názvem items.txt s následujícím obsahem.

items.txt

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

Jednoduché, pokud příklad :

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

$awk '{if ($ 3 ==' ') print' V řádku 'NR} chybí pole Cenaitems.txt

Výstup:

if-else příklad:

Následující příkaz vytiskne cenu položky, pokud 3rdpole v řádku existuje, v opačném případě vytiskne chybovou zprávu.

$ 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ž se následující příkaz spustí z terminálu, pak převezme vstup od uživatele. Vstupní hodnota bude porovnána s každou podmínkou if, dokud podmínka není pravdivá. Pokud se splní jakákoli podmínka, vytiskne odpovídající známku. Pokud se vstupní hodnota neshoduje s žádnou podmínkou, tisk se nezdaří.

$awk 'ZAČÍT {tisk' Zadejte značku: '
značka getline<'-'
pokud (značka> = 90) vytiskněte 'A+'
jinak pokud (značka> = 80) vytiskněte 'A'
jinak pokud (značka> = 70) vytiskne 'B+'
jinak vytisknout 'Fail'} '

Výstup:

Přejít na obsah

awk proměnné

Deklarace proměnné awk je podobná deklaraci proměnné shellu. Je rozdíl ve čtení hodnoty proměnné. Ke čtení hodnoty se s názvem proměnné pro proměnnou shell používá symbol „$“. Ke čtení hodnoty však není nutné používat ‘$’ s proměnnou awk.

Pomocí jednoduché proměnné:

Následující příkaz deklaruje proměnnou s názvem „Web“ a této proměnné je přiřazena hodnota řetězce. Hodnota proměnné je vytištěna v dalším výpisu.

$awk 'BEGIN {site =' LinuxHint.com '; vytisknout web} '

Výstup:

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

Následující příkaz vyhledá slovo „Tiskárna“ v souboru items.txt . Pokud některý řádek souboru začíná na „Tiskárna ‘Pak uloží hodnotu 1Svatý , 2nd a 3rd pole do tří proměnných. název a cena proměnné budou vytištěny.

$ awk'/ Printer/ {name = $ 1; brand = $ 2; price = $ 3; print' item name = 'name;
tisk 'item price =' price} '
položky.txt

Výstup:

Přejít na obsah

awk pole

V awk lze použít numerická i přidružená pole. Deklarace proměnné pole v awk je stejná jako u ostatních programovacích jazyků. V této části jsou uvedena některá použití polí.

Asociativní pole:

Index pole bude jakýkoli řetězec pro asociativní pole. V tomto příkladu jsou deklarovány a vytištěny asociativní pole tří prvků.

$awk 'ZAČÍT {
knihy ['Web Design'] = 'Učení HTML 5';
books ['Web Programming'] = 'PHP a MySQL'
knihy ['PHP Framework'] = 'Learning Laravel 5'
printf '%s n%s n%s n', knihy ['Web Design'], knihy ['Web Programming'],
knihy ['PHP Framework']} '

Výstup:

Numerické pole:

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

$ awk'ZAČÍT {
číslo [0] = 80;
číslo [1] = 55;
číslo [2] = 76;

# prvků tiskového pole
printf 'Hodnoty pole: %d t%d t%d n', číslo [0], číslo [1], číslo [2]; } '

Výstup:

Přejít na obsah

awk smyčka

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

Zatímco smyčka:

zatímco smyčka, která se používá v následujícím příkazu, bude 5krát iterovat a ukončí příkaz smyčky pro přerušení.

$ awk 'ZAČÍT {n = 1; while (n 5) break; tisk n; n ++}} '

Výstup:

Pro smyčku:

Pro smyčku, která se používá v následujícím příkazu awk, vypočítá součet od 1 do 10 a vytiskne hodnotu.

$awk 'ZAČÍT {součet = 0; pro (n = 1; n<= 10; n++) sum=sum+n; print sum }'

Výstup:

Do-while smyčka:

smyčka do-while následujícího příkazu vytiskne všechna sudá čísla od 10 do 5.

$awk 'BEGIN {counter = 10; do {if (counter%2 == 0) print counter; pult-}
while (counter> 5)} '

Výstup:

Přejít na obsah

awk k vytištění prvního sloupce

První sloupec libovolného souboru lze vytisknout pomocí proměnné $ 1 v awk. Pokud ale 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 students.txt s následujícím obsahem. Zde první sloupec obsahuje text dvou slov.

Students.txt

Kaniz Fatema 30thšarže
Abir Hossain 35thšarže
John Abraham 40thšarže

Spusťte příkaz awk bez oddělovače. Vytiskne se první část prvního sloupce.

$awk '{print $ 1}'students.txt

Spusťte příkaz awk s následujícím oddělovačem. Vytiskne se celá část prvního sloupce.

$awk -F '\ s \ s' '{print $ 1}'students.txt

Výstup:

Přejít na obsah

awk k vytištění posledního sloupce

$ (NF) proměnnou lze použít k tisku posledního sloupce libovolného souboru. Následující příkazy awk vytisknou poslední část a celou část posledního sloupce the students.txt soubor.

$awk '{print $ (NF)}'students.txt
$awk -F '\ s \ s' '{print $ (NF)}'students.txt

Výstup:

Přejít na obsah

awk s grep

grep je další užitečný příkaz Linuxu pro vyhledávání obsahu v souboru na základě libovolného regulárního výrazu. Jak lze příkazy awk a grep použít společně, ukazuje následující příklad. rukojeť příkaz se používá k vyhledávání informací o ID zaměstnance, „ 1002 ' z the employee.txt soubor. Výstup příkazu grep bude odeslán do awk jako vstupní data. 5% bonus bude započítán a vytištěn na základě platu ID zaměstnance, „ 1002 ' příkazem awk.

$kočkaemployee.txt
$rukojeť '1002'employee.txt| awk -F ' t' '{print $ 2' dostane $ '($ 3*5)/100' bonus '}'

Výstup:

Přejít na obsah

awk se souborem BASH

Stejně jako ostatní příkazy Linux lze příkaz awk použít také ve skriptu BASH. Vytvořte textový soubor s názvem customers.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 ‘/ '.

customers.txt

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, VALLECITO, Kalifornie / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Vytvořte bash soubor s názvem item_search.bash s následujícím skriptem. Podle tohoto skriptu bude hodnota stavu převzata od uživatele a prohledána the customers.txt soubor od rukojeť a předán příkazu awk jako vstup. Příkaz Awk bude číst 2nd a 4th pole každého řádku. Pokud se vstupní hodnota shoduje s libovolnou stavovou hodnotou customers.txt soubor, pak vytiskne zákaznický název a číslo mobilního telefonu , v opačném případě zprávu vytiskne Nebyl nalezen žádný zákazník .

item_search.bash

#!/bin/bash
vyhodil 'Zadejte název státu:'
čístStát
zákazníky=``rukojeť '$ stát'customers.txt| awk -F '/' '{print' Jméno zákazníka: '$ 2,',
Mobil č: '$ 4}'
``
-li [ '$ zákazníci' !='' ];pak
vyhodil $ zákazníci
jiný
vyhodil „Nebyl nalezen žádný zákazník“
být

Spuštěním následujících příkazů zobrazíte výstupy.

$kočkacustomers.txt
$bashitem_search.bash

Výstup:

Přejít na obsah

awk se sed

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

$kočkaemployee.txt
$sed -n '/J/p'employee.txt| awk -F ' t' '{printf'%s (%s) n ', $ 2, $ 1}'

Výstup:

Přejít na obsah

Závěr:

Po správném filtrování dat můžete pomocí příkazu awk vytvářet různé typy sestav na základě libovolných tabulkových nebo oddělených dat. Doufám, že se budete moci naučit, jak funguje příkaz awk, po procvičení příkladů uvedených v tomto tutoriálu.