Встроенные функции
Встроенные функции:
sin (expr) | синус expr | |
cos (expr) | косинус expr | |
exp (expr) | возведение в степень expr | |
log (expr) | натуральный логорифм expr | |
sqrt (expr) | извлечение корня expr | |
int (expr) | целая часть числа | |
length (s) | длина строки s | |
printf (fmt, ...) | форматирование (аналогично Си) по спецификации fmt. | |
substr (s, m, n) | подстрока в n символов строки s, начинающаяся с m. | |
getline () | чтение следующей строки. | |
0 | конец файла, иначе 1. | |
index (s1, s2) | номер позиции, с которой s1 совпадает с s2, иначе 0. | |
split (s, M, c) | строка s разбивается элементы массива M по разделителю c (по умолчанию FS=" "); функция возвращает число полей. |
Примеры.
1) awk ' BEGIN {FS = "."; a=0}
length ($1) > 8 {print (length ($1), $0);
a++
}
END {print ("Найдено строк: " a) }' f-awk
Результат:
9 Сидоров С.К. 1979 40
10 Хведоров И.Х. 1970 60
Найдено строк: 2
Здесь поля разделяются по ".", выбираются
строки у которых длина первого поля больше 8-ми, и их длина "length
($1)" печатается перед строкой "$0".
2) awk '{i=split($0, Name, ".");
for (j=1; j<=i; j++)
print ("Name[" j "]=" Name[j])
}' f-awk
Результат:
Name[1]=Иванов И
Name[2]=И
Name[3]= 1980 50
Name[1]=Петров А
Name[2]=В
Name[3]= 1979 40
Name[1]=Сидоров С
Name[2]=К
Name[3]= 1979 40
Name[1]=Хведоров И
Name[2]=Х
Name[3]= 1970 60
3) awk '{print (length)}' f-awk
Результат:
22
22
22
22
Поскольку все строки были выровнены пробелами, а
в длине строки учитываются все символы до конца строки.
4) awk '{printf "%7.2f %s\n", NR, $0}' f-awk
echo
awk '{printf "\t%s %s \n", NR, $0}' f-awk
Результат:
1.00 Иванов И.И. 1980 50
2.00 Петров А.В. 1979 40
3.00 Сидоров С.К. 1979 40
4.00 Хведоров И.Х. 1970 60
1 Иванов И.И. 1980 50
2 Петров А.В. 1979 40
3 Сидоров С.К. 1979 40
4 Хведоров И.Х. 1970 60