Skip to main content

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

Anonim

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

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

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

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

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

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

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

1, Јустин Тимберлаке, наслов 545, Цена 7,30 долара2, Таилор Свифт, Наслов 723, Цена $ 7,903, Мицк Јаггер, Наслов 610, Цена $ 7,904, Лади Гага, наслов 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; кол <= НФ; кол +) сум + = $ цол; принт сум; } '

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

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