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

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

Команда авк је моћан метод за обраду или анализу текстуалних датотека - посебно датотеке података које су организоване по линијама (редовима) и колонама.

Једноставне авк команде могу се покренути из командне линије . Комплекснији задаци требају бити написани као авк програми (тзв. Авк скрипте) у датотеку.

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

авк 'паттерн {ацтион}' улазна датотека> излаз-датотека

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

авк '{принт $ 5}' табле1.ткт> оутпут1.ткт

Ова изјава узима елемент петог ступца сваке линије и пише као линију у излазној датотеци "оутпут.ткт". Променљива '$ 4' односи се на другу колону. Слично томе, можете приступити првој, другој и трећој колони са $ 1, $ 2, $ 3 итд. По дефаулту претпоставља се да су ступци раздвојени размацима или картицама (тзв. Белим простором). Дакле, ако улазна датотека "табле1.ткт" садржи ове линије:

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

Затим би команда писала следеће редове у излазну датотеку "оутпут1.ткт":

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

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

авк -Ф, '{принт $ 3}' табле1.ткт> оутпут1.ткт

Ово ће изабрати елемент из колоне 3 у свакој линији ако се сматра да су колоне одвојене зарезом. Стога би у овом случају резултат био:

Титле 545 Титле 723 Титле 610 Титле 118 Наслов 482 Наслов 335 Наслов 271 Наслов 373

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

авк '$ 7 == "\ $ 7.30" {принт $ 3}' табле1.ткт

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

Дакле ова авк изјава одштампава елемент у 3. колони сваке линије која има "7.30 $" у колони 7.

Такође можете користити регуларне изразе као стање. На пример:

авк '/ 30 / {принт $ 3}' табле1.ткт

Низ између две косе ('/') је регуларни израз. У овом случају, то је само стринг "30." То значи да ако линија садржи низ "30", систем одштампа елемент у 3. колони те линије. Излаз у горе наведеном примеру би био:

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

Ако су елементи табеле бројеви авк могу покренути рачуне на њих као у овом примеру:

авк '{принт ($ 2 * $ 3) + $ 7}'

Осим променљивих које приступају елементима текућег реда ($ 1, $ 2, итд.) Постоји променљива $ 0 која се односи на комплетан ред (линија), и варијаблу НФ која држи до броја поља.

Такође можете дефинисати нове варијабле као у овом примеру:

авк '{сум = 0; за (цол = 1; кол <= НФ; кол +) сум + = $ цол; принт сум; } '

Ово израчунава и штампа збир свих елемената сваког реда.

Авк изјаве се често комбинују са сед командама .