====== Генератор отчетов awk ====== * [[https://youtu.be/4PkkMzB7fIM|Видео: Генератор отчетов AWK]] * [[https://ru.wikipedia.org/wiki/AWK|AWK в Википедии]] * [[http://lib.ru/MAN/DEMOS210/awk.txt|Язык обработки структурированных текстов AWK]] * [[https://superuser.com/questions/766887/tcpdump-how-to-get-grepable-output|tcpdump: how to get grepable output?]] ===== Печать исходных данных без изменений ===== $ awk '{print}' /etc/passwd $ awk '{print $0}' /etc/passwd $ awk -F: '{print $1 " " $7}' /etc/passwd ===== Фильтрация данных ===== $ awk '/^user/ {print $0}' /etc/passwd ===== Использование разделителя полей и отрицательного условия ===== $ awk -F: '!/sh$/ {print $1}' /etc/passwd ===== Использование заголовков и итогов в отчетах, использование переменных ===== $ awk -F: 'BEGIN {print "Users used /bin/sh:"; count=0} /bin\/sh$/ {print $1; count++} END {print "Summary:" count " users"}' /etc/passwd ===== Обработка файла почтового ящика пользователя ===== с какой строки начинается и от кого письмо $ cat ex1.awk BEGIN {st=1} /^$/ {st=1} /^From/ {if (st==1) {print "String " NR; print $0; st=0} } !/^$/ {st=0} $ awk -f ex1.awk /var/mail/user1 String 1 From user1@host19.class.un Wed Feb 15 05:41:42 2012 String 19 From user2@host19.class.un Wed Feb 15 05:41:58 2012 Переслать отдельное письмо: tail -n +21 /var/mail/user1 | formail -1 -s sendmail val@bmstu.ru ===== Выбор строк по числовому условию ===== * Пример назначения значений переменным и использования переменных окружения * [[Команды фильтры#Вывод списка ip адресов из файла]] $ cat list_count_ip.txt 32 172.16.1.5 15 172.16.1.3 11 172.16.1.4 24 172.16.1.1 $ COUNT=12 $ cat list_count_ip.txt | awk -v c=$COUNT '{if ($1 > c) print $2}' ===== Отчет по суммарному количеству товаров на складе ===== $ cat wares.txt table:34 car:24 apple:23 car:12 $ cat ex2.awk { M[$1]+=$2 } END { for (i in M) { print "sum " i "=" M[i] } } $ awk -F: -f ex2.awk wares.txt sum apple=23 sum car=36 sum table=34