User Tools

Site Tools


генератор_отчетов_awk

This is an old revision of the document!


Генератор отчетов awk

Печать исходных данных без изменений

$ 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

Подсчет количества элементов

$ cat list_ip.txt
172.16.1.5
172.16.1.3
172.16.1.5
172.16.1.1
172.16.1.5
172.16.1.1
$ cat list_ip.txt | awk '{M[$1]+=1}END{for (i in M) {print M[i] " " i}}' | sort -n

Отчет по суммарному количеству товаров на складе

$ 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
генератор_отчетов_awk.1529066041.txt.gz · Last modified: 2018/06/15 15:34 by val