20 авк примера

20 Awk Examples



У оперативном систему Линук постоје многи услужни алати за претраживање и генерисање извештаја из текстуалних података или датотека. Корисник може лако извршити многе врсте претраживања, замене и извештавања о генерисању задатака помоћу команди авк, греп и сед. авк није само команда. То је скриптни језик који се може користити и из терминалне и из авк датотеке. Подржава променљиву, условну наредбу, низ, петље итд. Попут других скриптних језика. Може читати било који садржај датотеке ред по ред и одвајати поља или колоне на основу одређеног граничника. Такође подржава регуларни израз за претраживање одређеног низа у текстуалном садржају или датотеци и предузима радње ако се пронађе неко подударање. Како можете користити авк команду и скрипту приказано је у овом водичу помоћу 20 корисних примера.

Садржај:

  1. авк са принтф
  2. авк за поделу на белом простору
  3. авк за промену граничника
  4. авк са подацима са табулаторима
  5. авк са цсв подацима
  6. авк регек
  7. авк регекс који не разликује велика и мала слова
  8. авк са променљивом нф (број поља)
  9. авк функција генсуб ()
  10. авк са функцијом ранд ()
  11. авк кориснички дефинисана функција
  12. авк ако
  13. авк променљиве
  14. авк арраис
  15. авк петља
  16. авк за штампање прве колоне
  17. авк за штампање последње колоне
  18. авк са грепом
  19. авк са датотеком басх скрипте
  20. авк са сед

Коришћење авк -а са принтф -ом

принтф () функција се користи за форматирање било којег излаза у већини програмских језика. Ова функција се може користити са авк наредба за генерисање различитих врста форматираних излаза. авк команда се углавном користи за било коју текстуалну датотеку. Направите текстуалну датотеку под називом запослени.ткт са доле наведеним садржајем где су поља одвојена табулатором (‘ т’).







запослени.ткт



1001 Јован сена 40000
1002 Јафар Икбал 60000
1003 Мехер Нигар 30000
1004 Јонни Ливер 70000

Следећа команда авк чита податке из запослени.ткт датотеку ред по ред и одштампајте прву датотеку након форматирања. Овде, %10с н значи да ће излаз бити дугачак 10 знакова. Ако је вредност излаза мања од 10 знакова, размаци ће се додати испред вредности.



$ авк'{принтф'%10с н', $ 1}'запослени.ткт

Излаз:





Идите на Садржај



авк за поделу на белом простору

Подразумевани сепаратор речи или поља за раздвајање било ког текста је размак. команда авк може узети вредност текста као унос на различите начине. Улазни текст се преноси са Избацио наредбу у следећем примеру. Текст, ' Волим програмирање ’Ће се поделити подразумеваним сепаратором, простор , а трећа реч ће бити одштампана као излаз.

$Избацио 'Волим програмирање' | авк '{принт $ 3}'

Излаз:

Идите на Садржај

авк за промену граничника

Команда авк се може користити за промену граничника за било који садржај датотеке. Претпоставимо да имате текстуалну датотеку под називом пхоне.ткт са следећим садржајем где се „:“ користи као сепаратор поља садржаја датотеке.

пхоне.ткт

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Покрените следећу авк команду да бисте променили граничник, „:“ од стране ‘-’ на садржај датотеке, пхоне.ткт .

$ цат пхоне.ткт
$ авк '$ 1 = $ 1' ФС = ':' ОФС = '-' пхоне.ткт

Излаз:

Идите на Садржај

авк са подацима са табулаторима

Команда авк има много уграђених променљивих које се користе за читање текста на различите начине. Два од њих су ФС и ОФС . ФС је сепаратор улазног поља и ОФС је променљиве сепаратора излазних поља. Употреба ових променљивих приказана је у овом одељку. Створити таб одвојена датотека са именом инпут.ткт са следећим садржајем за тестирање употребе ФС и ОФС Променљиве.

Инпут.ткт

Језик скриптирања на страни клијента
Језик скриптирања на страни сервера
Сервер базе података
Веб сервер

Коришћење ФС променљиве са таб

Следећа команда ће поделити сваки ред од инпут.ткт датотеку на основу картице („ т“) и одштампајте прво поље сваког реда.

$авк '{принт $ 1}' ФС=' т'инпут.ткт

Излаз:

Коришћење ОФС променљиве са таб

Следећа команда авк ће одштампати 9тх и 5тх поља од „Лс -л“ команда излаз са сепаратором табулатора након штампања наслова колоне Име и Величина . Овде, ОФС променљива се користи за форматирање излаза помоћу картице.

$лс -тхе
$лс -тхе | авк ОФС=' т' 'БЕГИН {принтф'%с т%с н ',' Наме ',' Сизе '} {принт $ 9, $ 5}'

Излаз:

Идите на Садржај

авк са ЦСВ подацима

Садржај било које ЦСВ датотеке може се рашчланити на више начина помоћу наредбе авк. Направите ЦСВ датотеку под називом „ цустомер.цсв ’Са следећим садржајем за примену авк команде.

цустомер.ткт

ИД, име, е -пошта, телефон
1, Сопхиа, [заштићена е-пошта], (862) 478-7263
2, Амелиа, [заштићена е-пошта], (530) 764-8000
3, Емма, [заштићена е-пошта], (542) 986-2390

Читање једног поља ЦСВ датотеке

„-Ф“ опција се користи са наредбом авк за постављање граничника за раздвајање сваке линије датотеке. Следећа команда авк ће одштампати име поље тхе цустомер.цсв филе.

$мачкацустомер.цсв
$авк ',' '{принт $ 2}'цустомер.цсв

Излаз:

Читање више поља комбиновањем са другим текстом

Следећа команда ће одштампати три поља цустомер.цсв комбиновањем текста наслова, Име, е -пошта и телефон . Прва линија цустомер.цсв датотека садржи наслов сваког поља. НЕ променљива садржи број реда датотеке када команда авк рашчлањује датотеку. У овом примеру, НР променљива се користи за изостављање првог реда датотеке. Излаз ће приказати 2нд, 3рди 4тхпоља свих линија осим првог реда.

$авк ',' 'НР> 1 {принт' Наме: '$ 2', Емаил: '$ 3', Пхоне: '$ 4}'цустомер.цсв

Излаз:

Читање ЦСВ датотеке помоћу авк скрипте

авк скрипта се може извршити покретањем авк датотеке. Како можете да креирате авк датотеку и покренете је приказано у овом примеру. Направите датотеку под називом авкцсв.авк са следећим кодом. ЗАПОЧЕТИ кључна реч се користи у скрипти за информисање авк команде да изврши скрипту ЗАПОЧЕТИ прво део пре извршавања других задатака. Овде раздвајач поља ( ФС ) се користи за дефинисање граничника раздвајања и 2нди 1стпоља ће се штампати у складу са форматом који се користи у функцији принтф ().

авкцсв.авк
ЗАПОЧЕТИ{ФС= ','} { принтф '% 5с (% с) н',$2,$1}

Трцати авкцсв.авк датотека са садржајем тхе цустомер.цсв датотеку следећом командом.

$авк авкцсв.авк цустомер.цсв

Излаз:

Идите на Садржај

авк регек

Регуларни израз је образац који се користи за претраживање било ког низа у тексту. Различите врсте компликованих задатака претраживања и замене могу се обавити врло лако коришћењем регуларног израза. У овом одељку су приказане неке једноставне употребе регуларног израза са наредбом авк.

Одговарајући ликкомплет

Следећа команда ће одговарати речи Будала или безобразлук или Хладан са улазним низом и одштампајте ако се реч нађе. Овде, Долл неће се подударати и неће се штампати.

$принтф 'Будало нХладан нДолл нбоол ' | авк '/[ФбЦ] оол/'

Излаз:

Тражење низа на почетку реда

‘^’ симбол се користи у регуларном изразу за претраживање било ког узорка на почетку линије. ' Линук ' реч ће се претраживати на почетку сваког реда текста у следећем примеру. Овде два реда почињу текстом, „Линук ’И те две линије ће бити приказане у излазу.

$Избацио „Линук је бесплатан за употребу нТо је софтвер отвореног кода нЛинукХинт је
популаран блог сајт '
| авк '/^Линук/'

Излаз:

Тражење низа на крају реда

„$“ симбол се користи у регуларном изразу за претраживање било којег узорка на крају сваког реда текста. ' Скрипта ’Реч се тражи у следећем примеру. Овде два реда садрже реч, Скрипта на крају реда.

$Избацио 'ПХП скрипта нЈаваСцрипт нВизуелно програмирање ' | авк '/Скрипта $/'

Излаз:

Претраживање изостављањем одређеног скупа знакова

‘^’ симбол означава почетак текста када се користи испред било ког узорка низа (‘ / ^… /’) или пре било ког скупа знакова који је прогласио ^ […] . Ако је ‘^’ симбол се користи унутар треће заграде, [^…] тада ће дефинисани скуп знакова унутар заграде бити изостављен у време претраживања. Следећа команда ће претраживати сваку реч која не почиње са „Ф“ али завршава са „ оол '. Хладан и боол штампаће се према обрасцу и текстуалним подацима.

$ принтф 'Будало нХладан нДолл нбоол ' |авк' / [^ Ф] оол /'

Излаз:

Идите на Садржај

авк регекс који не разликује велика и мала слова

Подразумевано, регуларни израз врши претраживање осетљиво на велика и мала слова када претражује било који узорак у низу. Претраживање без обзира на велика и мала слова може се извршити помоћу наредбе авк са регуларним изразом. У следећем примеру, спустити() функција се користи за претраживање без разликовања великих и малих слова. Овде ће прва реч сваког реда улазног текста бити конвертована у мала слова коришћењем спустити() функцију и подударају се са обрасцем регуларног израза. тоуппер () функција се такође може користити у ту сврху, у овом случају образац мора бити дефинисан великим словом. Текст дефинисан у следећем примеру садржи реч за претрагу, 'Веб “У два реда који ће бити одштампани као излаз.

$Избацио 'Веб дизајн нвеб развој нОквир ' | авк 'толовер ($ 0) ~ /^веб /;'

Излаз:

Идите на Садржај

авк са променљивом НФ (број поља)

НФ је уграђена променљива наредбе авк која се користи за пребројавање укупног броја поља у свакој линији улазног текста. Направите било коју текстуалну датотеку са више редова и више речи. инпут.ткт овде се користи датотека која је креирана у претходном примеру.

Коришћење НФ -а из командне линије

Овде се прва команда користи за приказ садржаја датотеке инпут.ткт филе и друга наредба се користе за приказ укупног броја поља у свакој линији датотеке која се користи НФ променљива.

$ цат инпут.ткт
$ авк '{принт НФ}' инпут.ткт

Излаз:

Коришћење НФ -а у авк датотеци

Направите авк датотеку под називом цоунт.авк са скриптом датим у наставку. Када се ова скрипта изврши са било којим текстуалним подацима, тада ће се сваки садржај реда са укупним пољима одштампати као излаз.

цоунт.авк

{принт $0}
{принт'[Укупно поља:'НФ']'}

Покрените скрипту следећом командом.

$авк цоунт.авк инпут.ткт

Излаз:

Идите на Садржај

авк функција генсуб ()

гетсуб () је функција замене која се користи за претраживање низа на основу одређеног разделника или обрасца регуларног израза. Ова функција је дефинисана у 'Гавк' пакет који није подразумевано инсталиран. Синтакса ове функције дата је испод. Први параметар садржи образац регуларног израза или граничник претраживања, други параметар садржи замјенски текст, трећи параметар означава како ће се претраживање извршити, а посљедњи параметар садржи текст у којем ће се ова функција примијенити.

Синтакса:

генсуб(регекп, замена, како[, мета])

Покрените следећу команду да бисте инсталирали гавк пакет за коришћење гетсуб () функција са наредбом авк.

$ судо апт-гет инсталл гавк

Направите текстуалну датотеку под називом „ салесинфо.ткт “Са следећим садржајем за увежбавање овог примера. Овде су поља одвојена табулатором.

салесинфо.ткт

Мојих 700000
Ваших 800000
Ср 750000
Сакупите 200000
Пет 430000
Суб 820000

Покрените следећу команду да бисте прочитали нумеричка поља датотеке салесинфо.ткт архивирајте и одштампајте укупан износ продаје. Овде трећи параметар, „Г“ означава глобалну претрагу. То значи да ће се образац претраживати у целом садржају датотеке.

$авк '{к = генсуб (' т ',' ',' Г ', $ 2); принтф к '+'} ЕНД {принт 0} 'салесинфо.ткт| пре нове ере -тхе

Излаз:

Идите на Садржај

авк са функцијом ранд ()

ред () функција се користи за генерисање било ког случајног броја већег од 0 и мање од 1. Дакле, увек ће генерисати разломачни број мањи од 1. Следећа команда ће генерисати разломачни случајни број и помножити вредност са 10 да би добио број већи од 1. За примену функције принтф () биће одштампан разломачни број са две цифре иза децималног зареза. Ако следећу команду покренете више пута, сваки пут ћете добити другачији излаз.

$авк 'БЕГИН {принтф' Број је =%. 2ф н ', ранд ()*10}'

Излаз:

Идите на Садржај

авк кориснички дефинисана функција

Све функције које се користе у претходним примерима су уграђене функције. Али можете декларисати кориснички дефинисану функцију у вашој авк скрипти за обављање било ког одређеног задатка. Претпоставимо да желите да креирате прилагођену функцију за израчунавање површине правоугаоника. Да бисте извршили овај задатак, направите датотеку под називом „ област.авк “Са следећим писмом. У овом примеру, кориснички дефинисана функција названа ареа () је декларисан у скрипти која израчунава површину на основу улазних параметара и враћа вредност површине. гетлине команда се овде користи за преузимање уноса од корисника.

област.авк

# Израчунајте површину
функцијаобласти(висина,ширина){
повратаквисина*ширина
}

# Покреће извршење
ЗАПОЧЕТИ{
принт'Унесите вредност висине:'
гетлине х< '-'
принт'Унесите вредност ширине:'
гетлине в< '-'
принт'Ареа ='области(х,у)
}

Покрените скрипту.

$авк област.авк

Излаз:

Идите на Садржај

авк ако пример

авк подржава условне изразе попут других стандардних програмских језика. Три врсте иф наредби приказане су у овом одељку помоћу три примера. Направите текстуалну датотеку под називом итемс.ткт са следећим садржајем.

итемс.ткт

ХДД Самсунг 100 долара
Миш А4Тецх
Штампач ХП 200 УСД

Једноставан ако пример :

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

$авк '{иф ($ 3 ==' ') принт' Поље за цену недостаје у реду 'НР}'итемс.ткт

Излаз:

пример иф-елсе:

Следећа команда ће одштампати цену ставке ако је 3рдпоље постоји у реду, у супротном ће одштампати поруку о грешци.

$ авк'{иф ($ 3 ==' ') принт' Поље за цену недостаје '
елсе принт 'цена ставке је' $ 3} '
ставке.ткт

Излаз:

иф-елсе-иф пример:

Када се следећа команда изврши са терминала, она ће узети унос од корисника. Улазна вредност ће се упоређивати са сваким иф условом све док услов не буде тачан. Ако било који услов постане тачан, штампаће одговарајућу оцену. Ако се улазна вредност не подудара са било којим условом, штампање неће успети.

$авк 'БЕГИН {принт' Унесите ознаку: '
гетлине марк<'-'
иф (ознака> = 90) одштампајте 'А+'
иначе иф (ознака> = 80) одштампајте 'А'
иначе иф (ознака> = 70) одштампај 'Б+'
елсе одштампајте 'Фаил'} '

Излаз:

Идите на Садржај

авк променљиве

Декларација варијабле авк је слична декларацији променљиве љуске. Постоји разлика у читању вредности променљиве. Симбол „$“ се користи са именом променљиве за варијаблу љуске за читање вредности. Али нема потребе да користите „$“ са авк променљивом за читање вредности.

Користећи једноставну променљиву:

Следећа команда ће прогласити променљиву намед „Сајт“ и тој променљивој је додељена вредност низа. Вредност променљиве је одштампана у следећој наредби.

$авк 'БЕГИН {сите =' ЛинукХинт.цом '; принт сите} '

Излаз:

Коришћење променљиве за преузимање података из датотеке

Следећа команда тражи реч „Штампач“ у датотеци итемс.ткт . Ако било који ред датотеке почиње са ‘Штампач ’Онда ће сачувати вредност 1ст , 2нд и 3рд поља у три променљиве. име и Цена варијабле ће бити одштампане.

$ авк'/ Штампач/ {наме = $ 1; бранд = $ 2; прице = $ 3; принт' итем наме = 'наме;
одштампај 'итем прице =' прице} '
ставке.ткт

Излаз:

Идите на Садржај

авк арраис

И нумерички и повезани низови се могу користити у авк -у. Декларација променљиве низа у авк је иста са другим програмским језицима. Неке употребе низова су приказане у овом одељку.

Асоцијативни низ:

Индекс низа ће бити било који низ за асоцијативни низ. У овом примеру, декларисан је и штампан асоцијативни низ од три елемента.

$авк 'ЗАПОЧЕТИ {
боокс ['Веб Десигн'] = 'Учење ХТМЛ 5';
боокс ['Веб Программинг'] = 'ПХП и МиСКЛ'
боокс ['ПХП Фрамеворк'] = 'Учење Ларавела 5'
принтф '%с н%с н%с н', књиге ['Веб дизајн'], књиге ['Веб програмирање'],
књиге ['ПХП Фрамеворк']} '

Излаз:

Нумерички низ:

Нумерички низ од три елемента се декларише и штампа одвајањем табулатора.

$ авк'ЗАПОЧЕТИ {
број [0] = 80;
број [1] = 55;
број [2] = 76;

# штампаних елемената низа
принтф 'Вредности низа: %д т т н', број [0], број [1], број [2]; } '

Излаз:

Идите на Садржај

авк петља

Авк подржава три врсте петљи. Употреба ових петљи је овде приказана помоћу три примера.

Док петља:

вхиле петља која се користи у следећој команди ће поновити 5 пута и изаћи из петље ради наредбе бреак.

$ авк 'БЕГИН {н = 1; вхиле (н 5) прекид; принт н; н ++}} '

Излаз:

За петљу:

Фор петља која се користи у следећој авк команди ће израчунати збир од 1 до 10 и одштампати вредност.

$авк 'БЕГИН {сум = 0; за (н = 1; н<= 10; n++) sum=sum+n; print sum }'

Излаз:

До-вхиле петља:

до-вхиле петља следеће наредбе штампаће све парне бројеве од 10 до 5.

$авк 'БЕГИН {цоунтер = 10; до {иф (цоунтер%2 == 0) принт бројач; бројач--}
вхиле (бројач> 5)} '

Излаз:

Идите на Садржај

авк за штампање прве колоне

Прва колона било које датотеке може се одштампати коришћењем променљиве $ 1 у авк -у. Али ако вредност прве колоне садржи више речи, штампа се само прва реч прве колоне. Коришћењем одређеног граничника, прва колона се може исправно одштампати. Направите текстуалну датотеку под називом студентс.ткт са следећим садржајем. Овде прва колона садржи текст две речи.

Студентс.ткт

Каниз Фатема 30тхсерија
Абир Хоссаин 35тхсерија
Јован Абрахам 40тхсерија

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

$авк '{принт $ 1}'студентс.ткт

Покрените авк команду са следећим граничником. Одштампаће се цео део прве колоне.

$авк '\ с \ с' '{принт $ 1}'студентс.ткт

Излаз:

Идите на Садржај

авк за штампање последње колоне

$ (НФ) променљива се може користити за штампање последње колоне било које датотеке. Следеће команде авк ће одштампати последњи део и цео део последње колоне тхе студентс.ткт филе.

$авк '{принт $ (НФ)}'студентс.ткт
$авк '\ с \ с' '{принт $ (НФ)}'студентс.ткт

Излаз:

Идите на Садржај

авк са грепом

греп је још једна корисна команда Линука за претраживање садржаја у датотеци на основу било ког регуларног израза. Како се команде авк и греп могу користити заједно приказано је у следећем примеру. дршка команда се користи за претраживање информација о ИД -у запосленог, ‘ 1002 ’Од запослени.ткт филе. Излаз греп команде ће бити послан на авк као улазни податак. Бонус од 5% ће се рачунати и одштампати на основу плате запосленог, ' 1002 ' наредбом авк.

$мачказапослени.ткт
$дршка '1002'запослени.ткт| авк ' т' '{принт $ 2' ће добити $ '($ 3*5)/100' бонус '}'

Излаз:

Идите на Садржај

авк са БАСХ датотеком

Као и остале команде Линука, команда авк се такође може користити у БАСХ скрипти. Направите текстуалну датотеку под називом цустомерс.ткт са следећим садржајем. Сваки ред ове датотеке садржи информације о четири поља. Ово су кориснички ИД, име, адреса и број мобилног телефона који су одвојени ‘/ '.

цустомерс.ткт

АЛ4934 / Цхарлес М Бруннер / 4838 Беегхлеи Стреет, Хунтсвилле, Алабама / 256-671-7942
ЦА5455 / Виргиниа С Мота / 930 Бассел Стреет, ВАЛЛЕЦИТО, Цалифорниа / 415-679-5908
ИЛ4855 / Анн А Неале / 1932 Паттерсон Форк Роад, Цхицаго, Иллиноис / 773-550-5107

Направите басх датотеку под називом итем_сеарцх.басх са следећим писмом. Према овој скрипти, вредност стања ће се преузети од корисника и претражити тхе цустомерс.ткт филе би дршка команда и прослеђена команди авк као улаз. Команда Авк ће читати 2нд и 4тх поља сваке линије. Ако се улазна вредност подудара са било којом вредношћу стања од цустомерс.ткт датотеку, затим ће одштампати корисникову име и број мобилног телефона , у супротном ће одштампати поруку Није пронађен ниједан купац .

итем_сеарцх.басх

#!/бин/басх
Избацио 'Унесите назив државе:'
читатидржава
купци=``дршка '$ стање'цустомерс.ткт| авк '/' '{принт' Корисничко име: '$ 2,',
Број мобилног телефона: '$ 4}'
``
ако [ '$ купаца' !='' ];онда
Избацио $ купаца
елсе
Избацио „Није пронађен ниједан купац“
бити

Покрените следеће команде да бисте приказали излазе.

$мачкацустомерс.ткт
$басхитем_сеарцх.басх

Излаз:

Идите на Садржај

авк са сед

Још један користан алат за претраживање Линука је сед . Ова команда се може користити за претраживање и замену текста било које датотеке. Следећи пример приказује употребу авк команде са сед команда. Овде ће команда сед претраживати сва имена запослених која почињу са „ Ј “И прелази у наредбу авк као улаз. авк ће штампати запосленог име и ИД након форматирања.

$мачказапослени.ткт
$сед '/Ј/п'запослени.ткт| авк ' т' '{принтф'%с (%с) н ', $ 2, $ 1}'

Излаз:

Идите на Садржај

Закључак:

Можете користити команду авк за креирање различитих врста извештаја на основу било којих табеларних или разграничених података након правилног филтрирања података. Надам се да ћете моћи да научите како функционише команда авк након увежбавања примера приказаних у овом водичу.