Примерни програми на AWK - ИТ бележки
Помощната програма awk е пример за класическо приложение за текстообработка на Linux. Той е много гъвкав и ефективен, въпреки че не предоставя пълен език за програмиране. Бъдете сигурни, че неговите възможности ще бъдат достатъчни за решаване на много задачи за автоматизирана обработка на текст (особено когато се комбинират с други помощни програми на конзолата).
Начини за стартиране на awk програми
Ако програмата awk е проста и достатъчно кратка, тогава нейният код може да бъде въведен директно в конзолата:
Като вход за awk можете да използвате не само текстови файлове, но и изход към стандартния поток от други приложения:
Когато кодът на awk е достатъчно голям или трябва да бъде запазен за повторна употреба, той може да бъде извикан от файл с ключ -f:
За провеждане на експерименти използваме файла test.cpp, върху който ще проверяваме резултатите от awk програми:
Филтриране на низове с awk
Предимно awk ви позволява да избирате редове от текст въз основа на регулярни изрази и някои числови условия.
Избиране на редове, които съответстват на регулярен израз
Например, за да получите всички редове от файла test.cpp, съдържащи директивата за препроцесор #include, използвайте следната команда:
Регулярният израз се записва между два/символа. В резултат получаваме:
Избиране на редове, НЕ съвпадащи с регулярния израз
Ето какво остава:
Избиране на редове от даден диапазон
Можете да определите обхвата на низовете, които да се показват на екрана, като използвате два регулярни израза, разделени със запетаи. Като пример, нека намерим дефиницията на всички функции, които връщат int:
Комбиниране на условията за филтриране
За да тествате низове за множество условия едновременно, използвайте && (И) и || (ИЛИ) .
Преди това търсихме диапазон от редове, използвайки два регулярни израза, но ако номерата на редовете, които трябва да бъдат изведени, са известни предварително, тогава всичко е опростено:
NR е awk променлива, която указва номера на реда. По този начин представеният код извежда 5-ти и 6-ти ред:
Избор на редове по условия по отношение на отделни думи
Awk може да филтрира текста не само по редове, но и по отделни думи. На i-тата дума в низа може да се направи препратка с помощта на $ i. Номерирането започва от едно и $ 0 определя съдържанието на целия ред. Броят на думите на ред се определя от променливата NF, така че $ NF сочи към последната дума. Например, нека намерим низове, чиято първа дума е int или void: