Скриптовый язык поверх скриптового языка баша. Для работы с текстовыми файлами и входящими тектовыми потоками.
awk скрипт состоит из
шаблон {операция}
На месте шаблона могут быть выражения, шаблоны и их комбинации. Под шаблоном подразумевается регексп.
Входящий поток авк расматривает как матрицу из определенным к-вом строк, и NF количеством полей в текущей строке.
$0 -- так можно обратиться ко всей поточной строке.
$1..$n -- так можно обратиться к нужному полю в поточной строке.
Поля разделяются разделителем FS, который по-умолчанию является пробелом и/или табом.
Чтобы поставить новое значение нужно:
awk -Fc "script" file-for-scan
Где с- новый разделитель
Авк может получать несколькими способами данные для сканирования:
cat for_awk | awk '/Ура/ {print}'
awk '/Ура/ {print}' < for_awk
awk '/Ура/ {print}' for_awk
Примеры:
awk ' $3~/(7[0-9])$/ {print} ' for_awk
Если третий филд подойдет патерну распечатать его строку.
awk '$1=="Иванов" {print} ' for_awk
Если первый филд равен конкретному значению распечатать его строку.
awk '/^Ив|дор/ {print} ' for_awk
Если строка начинается с "Ив" или в ней содержится "дор", то вывести ее.
awk '$3 != $4 && $3 > 1970 {print} ' f-awk
Если третий филд не равен ветвертому и третий больше значения вывести эту строку.
Также тут характерные сишные числовые операции. Переменные не требуют обьявления, инициализируются по умолчанию 0 или путой строкой -- если это строка.
Конкатинация строк происходит пробелом
Есть два шаблона
BEGIN -- до начала сканирования файла
END -- послед начала сканирвания файла
есть также пердопределенные переменные.
Файл f-awk:
Иванов И.И. 1980 50
Петров А.В. 1979 40
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
Команда со скриптом:
awk '{ s += $4 }
{print("NR=" NR, "NF=" NF)}
END {print ("FILENAME=" FILENAME)
print ("Значение позиционной переменной" $4 "\"пусто\" \
после окончания просмотра)")
print ("Суммарный возраст:" s)
print ("Средний возраст:" s/NR)}' f-awk
Результат:
NR=1 NF=4
NR=2 NF=4
NR=3 NF=4
NR=4 NF=4
FILENAME=f-awk
Значение позиционной переменной "пусто" после окончания просмотра)
Суммарный возраст:190
Средний возраст:47.5
Хороший краткий но полный туториал http://www.lissyara.su/doc/programming/awk/
awk скрипт состоит из
шаблон {операция}
На месте шаблона могут быть выражения, шаблоны и их комбинации. Под шаблоном подразумевается регексп.
Входящий поток авк расматривает как матрицу из определенным к-вом строк, и NF количеством полей в текущей строке.
$0 -- так можно обратиться ко всей поточной строке.
$1..$n -- так можно обратиться к нужному полю в поточной строке.
Поля разделяются разделителем FS, который по-умолчанию является пробелом и/или табом.
Чтобы поставить новое значение нужно:
awk -Fc "script" file-for-scan
Где с- новый разделитель
Авк может получать несколькими способами данные для сканирования:
cat for_awk | awk '/Ура/ {print}'
awk '/Ура/ {print}' < for_awk
awk '/Ура/ {print}' for_awk
Примеры:
awk ' $3~/(7[0-9])$/ {print} ' for_awk
Если третий филд подойдет патерну распечатать его строку.
awk '$1=="Иванов" {print} ' for_awk
Если первый филд равен конкретному значению распечатать его строку.
awk '/^Ив|дор/ {print} ' for_awk
Если строка начинается с "Ив" или в ней содержится "дор", то вывести ее.
awk '$3 != $4 && $3 > 1970 {print} ' f-awk
Если третий филд не равен ветвертому и третий больше значения вывести эту строку.
Также тут характерные сишные числовые операции. Переменные не требуют обьявления, инициализируются по умолчанию 0 или путой строкой -- если это строка.
Конкатинация строк происходит пробелом
Есть два шаблона
BEGIN -- до начала сканирования файла
END -- послед начала сканирвания файла
есть также пердопределенные переменные.
Файл f-awk:
Иванов И.И. 1980 50
Петров А.В. 1979 40
Сидоров С.К. 1979 40
Хведоров И.Х. 1970 60
Команда со скриптом:
awk '{ s += $4 }
{print("NR=" NR, "NF=" NF)}
END {print ("FILENAME=" FILENAME)
print ("Значение позиционной переменной" $4 "\"пусто\" \
после окончания просмотра)")
print ("Суммарный возраст:" s)
print ("Средний возраст:" s/NR)}' f-awk
Результат:
NR=1 NF=4
NR=2 NF=4
NR=3 NF=4
NR=4 NF=4
FILENAME=f-awk
Значение позиционной переменной "пусто" после окончания просмотра)
Суммарный возраст:190
Средний возраст:47.5
Хороший краткий но полный туториал http://www.lissyara.su/doc/programming/awk/
Комментариев нет:
Отправить комментарий