Hoe kinne AWK-kommando's en skripts sortearje

Kommando's, syntaksis, en foarbylden

It kommando awk is in krachtige metoade foar it ferwurkjen of analysearjen fan teksttriemmen - benammen, gegevensbestannen dy't organisearre binne troch linen (rigen) en kolommen.

Einfache awk-Befehls können von der Befehlszeile ausgeführt werden . Mear kompleksere taken moatte as awk-programma's skreaun wurde (saneamde awk-skripts) nei in bestân.

It basisfoarm fan in awk kommando sjocht dit sa:

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

Dit betsjut: elke line fan 'e ynput bestân; as de riging befetsje it patroan de aksje oan 'e rigel oan en skriuw de resultate line yn' e output-bestân. As it patroan ûntliend is, wurdt de aksje applikaasje oan 'e rigel tapast. Bygelyks:

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

Dizze deklaraasje nimt it elemint fan 'e 5e kolom fan eltse line en skriuwt it as rigel yn it útfier bestân "output.txt". De fariabele '$ 4' ferwiist nei de twadde kolom. Jo kinne ek tagong krije ta de earste, twadde, en tredde kolom, mei $ 1, $ 2, $ 3, ensfh. Standert wurde kolommen brûkt troch skieden of ljeppers (saneamd wytromte). Dus, as it ynput bestân "table1.txt" befettet dizze linen:

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

Dan sil it kommando de folgjende rigels skriuwe nei it útfier bestân "output1.txt":

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

As de kolomseparator wat oars is as romten of ljepblêden, lykas in komma, kinne jo dat oantsjutte yn 'e awk-statement:

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

Dit selektearje it elemint út kolom 3 fan eltse line as de kolommen as beskôge wurde troch in komma. Dêrom soe de útfier, yn dat gefal, wêze:

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

De list fan ferklearrings binnen de curly brackets ('{', '}') wurdt in blok neamd. As jo ​​in bedrach foar útspraak foar in blok sette, wurdt de deklaraasje yn it blok allinich útfiert as de betingst wier is.

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

Yn dit gefal is de kondysje $ 7 == "$ 7.30", dat betsjut dat it elemint by kolom 7 lyk is $ 7.30 is. De efterkant foar it dollar-teken wurdt brûkt om te foarkommen dat it systeem fan $ 7 as variable feroaret en it dollar-teken letterlik nimt.

Dus dizze awk-deklaraasje printset it elemint op 'e tredde kolom fan eltse line dy't in "$ 7.30" hat op kolom 7.

Jo kinne ek reguliere útdrukken brûke as de kondysje. Bygelyks:

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

De snaar tusken de twa slashes ('/') is de reguliere ekspresje. Yn dit gefal is it gewoan de string "30." Dit betsjuttet as in rigel de snaar "30" befettet, it systeem printsje it elemint op 'e tredde kolom fan dy line. De útfier yn it boppeneamde foarbyld soe wêze:

Timberlake, Gaga, Presley,

As de tafel-eleminten sifers binne, kinne awkk berekkeningen op harren draaie lykas yn dit foarbyld:

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

Neist de fariabelen dy't tagong elemint fan 'e aktuele rigel ($ 1, $ 2, ensfh.) Is de fariabele $ 0 dy't ferwiisd nei de folsleine rige (line), en de fariabele NF dy't it oantal fjilden hâldt.

Jo kinne ek nije fariabele definiearje lykas yn dit foarbyld:

awk '{sum = 0; foar (col = 1; col <= NF; col ++) sum + = $ col; print sum; } '

Dit skriuwt en drukket de som fan alle eleminten fan elke rige.

Awk-ferklearrings wurde faak kombineare mei sed-kommando's .