awk
Статья на хабре от ruvds
Статья на сайте ibm
Синтаксис
~$ awk OPTIONS PROGRAM FILE
-
OPTIONS
- опции -
PROGRAM
- файл с программой на awk или строка с ней :'{print "Welcome to awk command tutorial"}'
-
FILE
- файл который нужно обработать
Опции (основные)
-
-F fs
— позволяет указать символ-разделитель для полей в записи, вот так можно указать его внутри скриптаFS=":"
-
-f file
— указывает имя файла, из которого нужно прочесть awk-скрипт -
-v var=value
— позволяет объявить переменную и задать её значение по умолчанию, которое будет использовать awk -
-mf N
— задаёт максимальное число полей для обработки в файле данных -
-mr N
— задаёт максимальный размер записи в файле данных -
-W keyword
— позволяет задать режим совместимости или уровень выдачи предупреждений awk
Применение
По умолчанию, каждое слово заносится в переменную с именем $<номер слова в строке>
, а через переменную $0
можно обратиться ко всей текущей строке, например $3
в текущей строке содержит значение каждое
(под словом подразумевается поле выделенное из строки с помощью разделителя (по умолчанию пробел или табуляция))
Скрипты выглядят следующим образом: (точкой с запятой нужно разделять строки если они записаны в одну строку, а если нет то достаточно переноса строки) (чтобы выполнить какие-то инструкции до или после начала обработки текста, нужно добавить перед блоком такого кода соответственно слово BEGIN или END)
BEGIN {
print "sosamba niga mazafaka"
}
{
text = " has a home directory at "
print $1 text $6
}
END {
print "konets sosamby"
}
Переменная $NF хранит последнее слово из строки
Переменные для обработки:
- FIELDWIDTHS — разделённый пробелами список чисел, определяющий точную ширину каждого поля данных с учётом разделителей полей
- FS — уже знакомая вам переменная, позволяющая задавать символ-разделитель полей
- RS — переменная, которая позволяет задавать символ-разделитель записей
- OFS — разделитель полей на выводе awk-скрипта
- ORS — разделитель записей на выводе awk-скрипта
Пременные окружающей среды:
- ARGC — количество аргументов командной строки
- ARGV — массив с аргументами командной строки
- ARGIND — индекс текущего обрабатываемого файла в массиве ARGV
- ENVIRON — ассоциативный массив с переменными окружения и их значениями
- ERRNO — код системной ошибки, которая может возникнуть при чтении или закрытии входных файлов
- FILENAME — имя входного файла с данными
- FNR — номер текущей записи в файле данных
- IGNORECASE — если эта переменная установлена в ненулевое значение, при обработке игнорируется регистр символов
- NF — общее число полей данных в текущей записи
- NR — общее число обработанных записей
Например можно узнавать внутри скрипта об указанных ключах и значениях в команде или о домашей директории
Условный оператор
Однострочный вариант
if (УСЛОВИЕ) ДЕЙСТВИЕ
Обычный (если нужно выполниь несколько строк кода, то их нужно объединить фигурными скобками)
if (УСЛОВИЕ)
{
ДЕЙСТВИЕ1
ДЕЙСТВИЕ2
}
Циклы
Можно использовать оператор break и continue
- while
while (УСЛОВИЕ)
{
ДЕЙСТВИЕ1
ДЕЙСТВИЕ2
}
- for -
for (ИНИЦИАЛИЗАЦИЯ_СЧЕТЧИКА; УСЛОВИЕ; ИНКРЕМЕНТАЦИЯ) # как в С-подобных языках
{
ДЕЙСТВИЕ1
ДЕЙСТВИЕ2
}
Фарматированный вывод printf
Вывод настраивается через спецификаторы в формате %[modifier]control-letter
Список спецификаторов:
- c - воспринимает переданное ему число как код ASCII-символа и выводит этот символ
- d - выводит десятичное целое число
- i - то же самое, что и d
- e - выводит число в экспоненциальной форме
- f - выводит число с плавающей запятой
- g - выводит число либо в экспоненциальной записи, либо в формате с плавающей запятой, в зависимости от того, как получается короче
- o - выводит восьмеричное представление числа
- s - выводит текстовую строку
Пример:
printf "The result is: %e\n", x
Встроенные функции
Ссылка на gnu.org на страницу с функциями
Пользовательские функции
function ИМЯ_ФУНКЦИИ()
{
ТЕЛО_ФУНКЦИИ
}
No Comments