Kiel skribi AWK-Komandojn kaj Skriptoj

Komandoj, sintakso kaj ekzemploj

La awk-komando estas potenca metodo por prilaborado aŭ analizado de tekstaj dosieroj - aparte, datumaj dosieroj, kiuj estas organizitaj per linioj (vicoj) kaj kolumnoj.

Simplaj awk- ordonoj povas esti kuritaj de la komandlinio . Pli kompleksaj taskoj devus esti skribitaj kiel awk programoj (nomataj awk-skriptoj) al dosiero.

La baza formato de awk komando similas ĉi tion:

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

Ĉi tio signifas: prenu ĉiun linion de la eniga dosiero; se la linio enhavas la ŝablono apliki la agon al la linio kaj skribu la rezultantan linion al la eliga-dosiero. Se la ŝablono estas preterlasita, la ago aplikiĝas al ĉiu linio. Ekzemple:

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

Ĉi tiu deklaro prenas la elementon de la 5a kolumno de ĉiu linio kaj skribas ĝin kiel linio en la eliga dosiero "output.txt". La variablo '$ 4' aludas al la dua kolumno. Simile vi povas aliri la unuan, duan kaj trian kolumnon, kun $ 1, $ 2, $ 3, ktp. Defaŭlte kolumnoj estas apartigitaj de spacoj aŭ pestañas (tiel nomata blanka spaco). Do, se la eniga dosiero "table1.txt" enhavas ĉi tiujn liniojn:

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

Tiam la komando skribus la jenajn liniojn al la eliga dosiero "output1.txt":

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

Se la kolumna disigilo estas io krom spacoj aŭ pestañas, kiel komo, vi povas specifi tion en la aŭtomata deklaro kiel sekvas:

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

Ĉi tio elektos la elementon de kolumno 3 de ĉiu linio se la kolumnoj estas konsiderata apartaj per komo. Sekve la eligo, en ĉi tiu kazo, estus:

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

La listo de deklaroj en la buklaj krampoj ('{', '}') estas nomata bloko. Se vi metas kondician esprimon antaŭ bloko, la deklaro ene de la bloko estos ekzekutita nur se la kondiĉo estas vera.

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

En ĉi tiu kazo, la kondiĉo estas $ 7 == "\ $ 7.30", kio signifas, ke la elemento ĉe kolumno 7 estas egala al $ 7.30. La malaltiĝo antaŭ la dolaro-signo estas uzata por malhelpi la sistemon interpreti $ 7 kiel variablo kaj anstataŭe preni la dolaron subskribi laŭvorte.

Do ĉi tiu aŭtomata deklaro presas la elementon ĉe la tria kolumno de ĉiu linio, kiu havas "$ 7.30" ĉe kolumno 7.

Vi povas ankaŭ uzi regulajn esprimojn kiel la kondiĉo. Ekzemple:

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

La ŝnuro inter la du slashes ('/') estas la regula esprimo. En ĉi tiu kazo, ĝi estas nur la ĉeno "30." Ĉi tio signifas, se linio enhavas la ĉenon "30", la sistemo elprenas la elementon ĉe la tria kolumno de tiu linio. La eligo en la supra ekzemplo estus:

Timberlake, Gaga, Presley,

Se la tablo-elementoj estas nombroj, ili povas kalkuli kalkulojn pri ili kiel en ĉi tiu ekzemplo:

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

Krom la variabloj, kiuj aliras elementojn de la nuna vico ($ 1, $ 2, ktp) ekzistas la variablo $ 0, kiu rilatas al la kompleta linio (linio) kaj la variablo NF, kiu tenas la numeron de kampoj.

Vi povas ankaŭ difini novajn variablojn kiel en ĉi tiu ekzemplo:

awk '{sum = 0; por (col = 1; col <= NF; col ++) sum + = $ col; presi sumon; } '

Ĉi tiu komputas kaj presas la sumon de ĉiuj elementoj de ĉiu vico.

Komputiloj ofte kombinas kun sedaj ordonoj .