Здесь показаны различия между двумя версиями данной страницы.
linux:awk [2017/12/09 11:05] |
linux:awk [2021/02/11 09:20] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ===== Linux: примеры использования awk ===== | ||
+ | gawk это язык распознавания и обработки шаблонов. | ||
+ | Примеры: | ||
+ | <code bash> | ||
+ | #выборка полей из стандартного вывода | ||
+ | #выбирает первое поле | ||
+ | $ echo 'one two three four' | awk '{print $1}' | ||
+ | > one | ||
+ | #выбирает третье и первое поле | ||
+ | $ echo 'one two three four' | awk '{print $3,$1}' | ||
+ | > three one | ||
+ | </code> | ||
+ | Если полярзделены не пробелом или табулятором, то используем ключ -F: | ||
+ | <code bash> | ||
+ | ....awk -F":" '{print $4}' | ||
+ | </code> | ||
+ | |||
+ | Если количество полей неизвестно, то используем переменную NF: | ||
+ | <code bash> | ||
+ | #выбираем последнее поле | ||
+ | ....awk '{print $NF}' | ||
+ | </code> | ||
+ | или предпоследнее | ||
+ | <code bash> | ||
+ | ....awk '{print $(NF-1)}' | ||
+ | </code> | ||
+ | как вариант, выбрать поле ровно посередине | ||
+ | <code bash> | ||
+ | ....awk '{print $((NF/2)+1)}' | ||
+ | </code> | ||
+ | Подсчитать число байт переданных веб-сервером, на основании его log-файла (известно, что байты там последнее поле) | ||
+ | <code bash> | ||
+ | $ cat requests.log | ||
+ | 23 июля 18:57:12 HTTPD [31950]: "GET / Foo / бар HTTP / 1.1" 200 344 | ||
+ | 23 июля 18:57:13 HTTPD [31950]: "GET / HTTP / 1.1" 200 9300 | ||
+ | 23 июля 19:01:27 HTTPD [31950]: "GET / HTTP / 1.1" 200 9300 | ||
+ | 23 июля 19:01:55 HTTPD [31950]: "GET / Foo / Baz HTTP / 1.1" 200 6401 | ||
+ | 23 июля 19:02:31 HTTPD [31950]: "? GET / Foo / Baz страница = 2 HTTP / 1.1" 200 6312 | ||
+ | $ < requests.log awk '{totalBytes+=$NF} END {print totalBytes}' | ||
+ | 31657 | ||
+ | </code> |