AWK командалары мен сценарийлерін қалай жазу керек

Командалар, синтаксис және мысалдар

Awk пәрмені мәтіндік файлдарды өңдеуге немесе талдауға арналған, әсіресе жолдар (жолдар) және бағандар арқылы ұйымдастырылған деректер файлдары үшін күшті әдіс болып табылады.

Қарапайым awk пәрмендерін пәрмен жолынан іске қосуға болады. Күрделі тапсырмалар файлға awk бағдарламалары (awk сценарийлері деп аталады) ретінде жазылуы керек.

Awk пәрменінің негізгі пішімі келесідей:

awk 'үлгісі {action}' input-file> output-file

Бұл дегеніміз: кіріс файлдың әр жолын қабылдайды; егер жолда үлгісі әрекетті сызыққа қолданып, нәтиже жолын output-файлына жазыңыз. Үлгі шығарылмаса, әрекет барлық жолға қолданылады. Мысалға:

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, Johnny Cash, Аталым 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, '{print $ 3}' table1.txt> output1.txt

Егер бағандар үтір арқылы бөлінген болса, бұл әр жолдың 3-бағанынан элементті таңдайды. Сондықтан шығыс, бұл жағдайда:

Атауы 545 Атауы 723 Атауы 610 Атауы 118 Атауы 482 Атауы 335 Атауы 271 Атауы 373

Кесетін жақшалар ішіндегі мәлімдемелер тізімі ('{', '}') блок деп аталады. Егер сіз блоктың алдында шартты өрнек қойсаңыз, блоктың ішіндегі мәлімдеме шарт дұрыс болса ғана орындалады.

awk '$ 7 == «\ $ 7.30» {print $ 3}' кестесі1.txt

Бұл жағдайда шарт $ 7 == «\ $ 7.30», яғни 7 бағандағы элемент $ 7.30 тең. Доллар белгісінің алдындағы қиғаш сызық жүйені айнымалы ретінде $ 7 түсіндіруге кедергі келтіреді және орнына доллар белгісін бірден қабылдайды.

Осылайша, бұл awk мәлімдемесі 7 бағанында «$ 7.30» бар әрбір жолдың 3 бағанындағы элементті басып шығарады.

Сондай-ақ, қалыпты өрнектерді шарт ретінде пайдалануға болады. Мысалға:

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 мәлімдемелері жиі сэм командаларымен біріктіріледі.