Wéi schreiwen AWK Commands a Scripte

Commande, Syntax a Beispiller

De awk-Kommando ass eng mächteg Method fir d'Veraarbechtung oder Analyse vun Textdateien ze benotzen - besonnesch Dossierdateien, déi duerch Linnen (Zeilen) an Säulen organiséiert ginn.

Einfache awk Befehle kënnen aus der Kommandozeilung lafen . Méi komplexe Aufgaben sollten als awk Programme geschriwwe ginn (sougenannt awk-Skripte) op eng Datei.

De Basisformat vun engem awk Kommando kuckt wéi:

awk 'Muster {action}' input-file> output-file

Dëst bedeit: All Zeil vun der Input- Datei; Wann d'Zeil enthüllt d'Muster d'Handlung fir d'Linn a schreift déi entsteet Linn zur Ausgaang-Datei. Wann d'Muster entlooss gëtt, gëtt d'Aktioun op all Linn ugewisen. Zum Beispill:

awk '{print $ 5}' table1.txt> output1.txt

Dës Erklärung hëlt d'Element vun der 5. Kolonn vun all Linn an schreift se als Zeil an der Ausgabdatei "output.txt". D'Variabel '$ 4' steet op déi zweet Kolonn. Ähnlech wéi Dir kënnt op d'éischt, zweet an drëtt Späicher mat 1 $, $ 2, $ 3 uschafen. Standard Späicher gëtt ugeholl duerch Leer oder Tabs (sou heescht Wäissraum). Also, wann d'Input- Datei "table1.txt" dës Linnen enthält:

1, Justin Timberlake, Titel 545, Präis $ 7.30 2, Taylor Swift, Titel 723, Präis $ 7.90 3, Mick Jagger, Titel 610, Präis $ 7.90 4, Lady Gaga, Titel 118, Präis $ 7.30 5, Johnny Cash, Titel 482, Präis $ 6.50 6, Elvis Presley, Titel 335, Präis $ 7.30 7, John Lennon, Titel 271, Präis $ 7.90 8, Michael Jackson, Titel 373, Präis $ 5.50

Duerno huet de Kommando déi folgend Zeilen an der Ausgabdatei "output1.txt" ze schreiwe:

545, 723, 610, 118, 482, 335, 271, 373,

Wann de Spaltentrennwator eppes wéi Leer oder Tabs, wéi e Comma, kënnt Dir an der awk-Ausso uginn:

awk -F, '{print $ 3}' Table1.txt> output1.txt

Dëst wielt d'Element aus der Spalte 3 vun all Zeil, wann d'Spalten als als Faarf ofgetrennt sinn. Dofir ass d'Ausgaach an dësem Fall:

Titel 545 Titel 723 Titel 610 Titel 118 Titel 482 Titel 335 Titel 271 Titel 373

D'Lëscht vun Aussoen am Buedem steet ('{', '}') gëtt e Block. Wann Dir eng bedingend Expression virun e Block gesat gëtt, gëtt d'Erklärung am Block unhéiert nëmme wann d'Conditioun ass richteg.

awk '$ 7 == "$ 7.30" {print $ 3}' table1.txt

An dësem Fall ass d'Konditioun $ 7 == "$ 7.30", dat heescht datt d'Element bei der Kolonn 7 gleich 7,30 $ ass. De Réckschësse virum Dollar Zeechen ass benotzt fir ze verhënneren dass de System $ 7 als Variabel interpretéiert an stattdet d'Dollar Zeechen wuertwiertlech ze huelen.

Also dës awk-Ausso iwwerleet d'Element an der 3. Spalte vun all Linn, déi e "$ 7.30" an der Spalt 7 huet.

Dir kënnt och regulär Ausdréck als Bedingung benotzen. Zum Beispill:

awk '/ 30 / {print $ 3}' table1.txt

De String tëscht den zwee Schräiner ('/') ass de reguläre Ausdrock. An dësem Fall ass et just de String "30." Dëst bedeit, datt eng Linn d'String "30" enthält, dréckt de System d'Element an der 3. Spalte vun där Linn aus. D'Ausgaach am obengen Beispill ass:

Timberlake, Gaga, Presley,

Wann d'Table Elementen Nummeren awk kënne Rechnungen op si lafen wéi an dësem Beispill:

awk '{print ($ 2 * $ 3) + $ 7}'

Nieft deene Variabel, déi Zougrëffelementer vun der aktueller Zeil ($ 1, $ 2, etc.) ass, ass d'Variable $ 0, déi op d'komplettst Zeil steet, an déi variabel NF déi op d'Zuel vu Felder steet.

Dir kënnt och nei Variablen definéieren wéi an dësem Beispill:

awk '{sum = 0; (col = 1; col <= NF; col ++) sum + = $ col; bedréckten Zomm; } '

Dëst berechnet an d'Summe vun all de Elementer vun all Zeilen.

Awk-Aussoen sin meeschtens kombinéiert mat sougene Befehle .