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ů.,
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
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.
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.
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
+880:1855:456:907
+9:7777:38644:808
Spusťte následující příkaz awk změnit oddělovač, ‚: ‚“ – “ obsah souboru, telefon.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
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.,
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 | 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.
$ 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.
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 ().
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.
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.
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.
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.,
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.,
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.
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.,
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.
$ 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““}
spusťte skript následujícím příkazem.
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:
Spusťte následující příkaz k instalaci zírat balíček pro použití getsub() funkce s awk příkaz.
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
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.,
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.
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.
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
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.
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.
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í.,
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.
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.
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.,
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.,
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.,
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
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.,
Spusťte příkaz awk s následujícím oddělovačem. Celá část prvního sloupce bude vytištěna.
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-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.
$ 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ů.
$ 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í.
$ 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.