Tento článek je součástí právě probíhající série výukových programů a příkladů Awk. Jako každý jiný programovací jazyk má Awk také uživatelsky definované proměnné a vestavěné proměnné.
V tomto článku se podíváme na to, jak definovat a používat awk proměnné .
- Proměnné Awk by měly začínat písmenem, za kterým by měly následovat alfanumerické znaky nebo podtržítko.
- Klíčová slova nelze použít jako proměnnou awk
- Awk nepodporuje deklaraci proměnných jako jiné programovací jazyky
- Vždy je lepší inicializovat proměnné awk v sekci BEGIN, která se na začátku provede pouze jednou.
- V Awk nejsou žádné datové typy. Zda má být proměnná awk považována za číslo nebo jako řetězec, závisí na kontextu, ve kterém je použita.
Nyní si projdeme několik jednoduchých příkladů, abychom se naučili používat uživatelem definované proměnné awk.
Příklad Awk 1:Fakturace za knihy
V tomto příkladu obsahuje vstupní soubor bookdetails.txt záznamy s poli — číslo položky, Název knihy, Množství a Sazba za knihu.
$ cat bookdetails.txt 1 Linux-programming 2 450 2 Advanced-Linux 3 300 3 Computer-Networks 4 400 4 OOAD&UML 3 450 5 Java2 5 200
Nyní následující skript Awk přečte a zpracuje výše uvedený soubor bookdetails.txt a vygeneruje zprávu, která zobrazí — míru každé prodané knihy a celkovou částku za všechny prodané knihy.
Doposud jsme viděli, že Awk čte příkazy z příkazového řádku, ale Awk také umí číst příkazy ze souboru pomocí volby -f.
Syntax: $ awk -f script-filename inputfilename
Nyní je níže uveden náš skript Awk pro výpočet fakturace za knihy.
$ cat book-calculation.awk BEGIN { total=0; } { itemno=$1; book=$2; bookamount=$3*$4; total=total+bookamount; print itemno," ", book,"\t","$"bookamount; } END { print "Total Amount = $"total; }
Ve výše uvedeném skriptu
- Awk Sekce BEGIN inicializuje proměnnou total. itemno, total, book, bookamount jsou uživatelem definované proměnné awk.
- V Akci Awk sekce, Množství*knihovní cena bude uložena v proměnné nazvané bookamount. Ke každé záložce bude přidána celková částka.
- Konečně v Awk END sekce, celková proměnná bude mít celkovou částku.
Nyní spusťte skript book-calculation.awk a vygenerujte zprávu, která zobrazí každou sazbu knihy a celkovou částku, jak je uvedeno níže.
$ awk -f book-calculation.awk bookdetails.txt 1 Linux-programming $900 2 Advanced-Linux $900 3 Computer-Networks $1600 4 OOAD&UML $1350 5 Java2 $1000 Total Amount = $5750
Příklad Awk 2. Výpočet studentské známky
V tomto příkladu vytvořte vstupní soubor „student-marks.txt“ s následujícím obsahem – jméno studenta, číslo hodnosti, skóre Test1, skóre Test2 a skóre Test3.
$ cat student-marks.txt Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 65 Edwin 2537 78 67 45 Dayan 2415 30 47 20
Nyní následující skript Awk vypočítá a vygeneruje zprávu, která zobrazí průměrné známky každého studenta, průměr skóre Test1, Test2 a Test3.
$cat student.awk BEGIN { test1=0; test2=0; test3=0; print "Name\tRollNo\t Average Score"; } { total=$3+$4+$5; test1=test1+$3; test2=test2+$4; test3=test3+$5; print $1"\t"$2"\t",total/3; } END{ print "Average of Test1="test1/NR; print "Average of Test2="test2/NR; print "Average of Test3="test3/NR; }
Ve výše uvedeném skriptu Awk
- V Awk BEGIN sekce všechny proměnné awk jsou inicializovány na nulu. test1, test2, test3 a total jsou uživatelem definované proměnné awk.
- V AKCI Awk sekce, $3, $4, $5 jsou skóre Test1, Test2 a Test3. celková proměnná je součet 3 skóre testu pro každého studenta. Proměnné awk test1, test2 a test3 mají celkové skóre každého odpovídajícího testu.
- Takže v Awk END části, vydělením celkového počtu testů celkovým počtem záznamů (tj. student) získáte průměrné skóre. NR je vestavěná proměnná Awk což udává celkový počet záznamů na vstupu.
Příklad Awk 3. Zpráva HTML pro podrobnosti o studentovi
Ve výše uvedených dvou příkladech jsme viděli proměnnou awk, která má jako hodnoty čísla. Tento příklad ukazuje awk skript pro generování html sestavy pro jméno studentů a jejich číslo role.
$ cat string.awk BEGIN{ title="AWK"; print "<html>\n<title>"title"</title><body bgcolor=\"#ffffff\">\n<table border=1><th colspan=2 align=centre>Student Details</th>"; } { name=$1; rollno=$2; print "<tr><td>"name"</td><td>"rollno"</td></tr>"; } END { print "</table></body>\n</html>"; }
Použijte stejný vstupní soubor student-marks.txt, který jsme vytvořili ve výše uvedeném příkladu.
$ awk -f string.awk student-marks.txt <html> <title>AWK</title><body bgcolor="#ffffff"> <table border=1><th colspan=2 align=centre>Student Details</th> <tr><td>Jones</td><td>2143</td></tr> <tr><td>Gondrol</td><td>2321</td></tr> <tr><td>RinRao</td><td>2122</td></tr> <tr><td>Edwin</td><td>2537</td></tr> <tr><td>Dayan</td><td>2415</td></tr> </table></body> </html>
Můžeme uložit výše uvedený výstup, což dává následující html tabulku. Ve výše uvedeném skriptu jsou proměnné s názvem name a rollno řetězcové proměnné, protože se používají v kontextu řetězce.
Student Details | |
---|---|
Jones | 2143 |
Gondrol | 2321 |
RinRao | 2122 |
Edwin | 2537 |
Dayan | 2415 |
Doporučená četba
Sed and Awk 101 Hacks, od Rameshe Natarajan . V prostředí UNIX/Linux trávím několik hodin denně a zabývám se textovými soubory (data, konfigurační soubory a soubory protokolu). Sed a Awk používám pro všechny své práce s textem. Na základě mých zkušeností se Sed and Awk jsem napsal e-knihu Sed and Awk 101 Hacks, která obsahuje 101 praktických příkladů různých pokročilých funkcí Sed a Awk, které zlepší váš život v UNIX / Linux. I když Sed and Awk používáte několik let a nečetli jste tuto knihu, udělejte si laskavost a přečtěte si tuto knihu. Budete ohromeni možnostmi nástrojů Sed a Awk.