Команде, синтаксу и примере
Команда авк је моћан метод за обраду или анализу текстуалних датотека - посебно датотеке података које су организоване по линијама (редовима) и колонама.
Једноставне авк команде могу се покренути из командне линије . Комплекснији задаци требају бити написани као авк програми (тзв. Авк скрипте) у датотеку.
Основни формат авк наредбе изгледа овако:
авк 'паттерн {ацтион}' улазна датотека> излаз-датотекаТо значи: узмите сваку линију улазне датотеке; ако линија садржи образац примени акције на линију и уписати резултујућу линију у излазну датотеку. Ако је образац испуштен, акција се примењује на све линије. На пример:
авк '{принт $ 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; кол <= НФ; кол +) сум + = $ цол; принт сум; } 'Ово израчунава и штампа збир свих елемената сваког реда.
Авк изјаве се често комбинују са сед командама .