Како да напишете AWK команди и скрипти

Команди, синтакса и примери

Командата awk е моќен метод за обработка или анализа на текстуални датотеки, особено датотеки со податоци кои се организирани со линии (редови) и колони.

Едноставни awk команди може да се стартуваат од командната линија . Покомплексните задачи треба да бидат напишани како awk програми (т.н. awk скрипти) во датотека.

Основниот формат на командата awk изгледа вака:

awk 'шема {action}' влез-датотека> излез-датотека

Ова значи: земете ја секоја линија од влезната датотека; ако линијата го содржи моделот, примени го акцијата на линијата и запишете ја добиената линија во излезната датотека. Ако моделот е испуштен, акцијата се применува на целата линија. На пример:

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

Оваа изјава го зема елементот на 5-тата колона од секоја линија и ја пишува како линија во излезната датотека "output.txt". Променливата "$ 4" се однесува на втората колона. Слично на тоа, можете да пристапите до првата, втората и третата колона со $ 1, $ 2, $ 3, итн. По правило, колоните се претпоставува дека се одделени со празни места или табови (т.н. бел простор). Значи, ако влезната датотека "table1.txt" ги содржи овие редови:

1, Џастин Тимберлејк, наслов 545, Цена 7,30 $ 2, Тејлор Свифт, наслов 723, Цена 7,90 $ 3, Мик Џегер, наслов 610, Цена 7,90 $ 4, Лејди Гага, наслов 118, Цена 7,30 $ 5, Џони Кеш, наслов 482, Цена 6,50 6, Елвис Присли, наслов 335, цена 7,30 $ 7, Џон Ленон, наслов 271, цена 7,90 $ 8, Мајкл Џексон, наслов 373, цена 5,50 $

Тогаш командата ќе ги напише следните редови во излезната датотека "output1.txt":

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

Ако колона сепаратор е нешто друго освен простори или јазичиња, како што е запирка, можете да го наведете тоа во изјавата awk како што следува:

awk -F, '{печати $ 3}' table1.txt> output1.txt

Ова ќе го избере елементот од колоната 3 од секоја линија, ако столбовите се сметаат за одделени со запирка. Затоа излезот, во овој случај, би бил:

ИЗВЕШТАЈ НА 545 НАСЛОВИ 723 Наслов 610 етап 118 наслов 482 наслов 335 лист 271 наслов 373

Списокот на изјави во кадравите загради ('{', '}') се нарекува блок. Ако поставите условен израз пред блок, изјавата во блокот ќе се изврши само ако условот е точен.

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

Во овој случај, состојбата е $ 7 == "\ $ 7.30", што значи дека елементот во колона 7 е еднаков на 7,30 долари. Обратна коса црта пред знакот за долар се користи за да се спречи системот да интерпретира $ 7 како променлива и наместо тоа да го симне знакот за долар буквално.

Значи оваа awk изјава го отпечатоци елементот на 3. колона од секоја линија која има "7,30 долари" во колона 7.

Можете исто така да користите регуларни изрази како состојба. На пример:

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

Стрингот меѓу двата коса ('/') е регуларниот израз. Во овој случај, тоа е само низата "30." Ова значи дека ако линијата содржи низа "30", системот го отпечатоци елементот на 3. колона од таа линија. Излезот во горенаведениот пример би бил:

Тимберлејк, Гага, Присли,

Ако елементите на табелата се броеви awk, може да извршат пресметки за нив како во овој пример:

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

Освен променливите што пристапуваат до елементите од тековниот ред ($ 1, $ 2, итн.), Постои променлива $ 0 која се однесува на целиот ред (линија) и променливата NF која има за бројот на полиња.

Исто така можете да дефинирате нови променливи како во овој пример:

awk '{sum = 0; за (col = 1; col <= NF; col +) сума + = $ col; печатена сума; } '

Ова ја пресметува и печати јачината на сите елементи од секој ред.

Awk изјавите често се комбинираат со sed командите .