This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
генератор_отчетов_awk [2012/02/15 14:31] val |
генератор_отчетов_awk [2018/06/15 14:12] val [Подсчет количества элементов] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Генератор отчетов awk ====== | ====== Генератор отчетов awk ====== | ||
- | [[http://ru.wikipedia.org/wiki/AWK]] | + | * [[https://youtu.be/4PkkMzB7fIM|Видео: Генератор отчетов AWK]] |
- | + | * [[https://ru.wikipedia.org/wiki/AWK|AWK в Википедии]] | |
- | [[http://lib.ru/MAN/DEMOS210/awk.txt]] | + | * [[http://lib.ru/MAN/DEMOS210/awk.txt|Язык обработки структурированных текстов AWK]] |
===== Печать исходных данных без изменений ===== | ===== Печать исходных данных без изменений ===== | ||
Line 20: | Line 20: | ||
===== Использование разделителя полей и отрицательного условия ===== | ===== Использование разделителя полей и отрицательного условия ===== | ||
<code> | <code> | ||
- | $ awk -F: '!/nologin/ {print $1}' /etc/passwd | + | $ awk -F: '!/sh$/ {print $1}' /etc/passwd |
- | # $FreeBSD | + | |
- | # | + | |
- | root | + | |
- | toor | + | |
</code> | </code> | ||
+ | |||
===== Использование заголовков и итогов в отчетах, использование переменных ===== | ===== Использование заголовков и итогов в отчетах, использование переменных ===== | ||
<code> | <code> | ||
- | $ awk -F: 'BEGIN {print "Users used csh"; count=0} /csh$/ {print $1; count++} END {print count " users"}' /etc/passwd | + | $ awk -F: 'BEGIN {print "Users used /bin/sh:"; count=0} /bin\/sh$/ {print $1; count++} END {print "Summary:" count " users"}' /etc/passwd |
</code> | </code> | ||
+ | |||
===== Обработка файла почтового ящика пользователя ===== | ===== Обработка файла почтового ящика пользователя ===== | ||
с какой строки начинается и от кого письмо | с какой строки начинается и от кого письмо | ||
<code> | <code> | ||
- | $ ee ex1.awk | ||
- | |||
$ cat ex1.awk | $ cat ex1.awk | ||
+ | </code><code> | ||
BEGIN {st=1} | BEGIN {st=1} | ||
/^$/ {st=1} | /^$/ {st=1} | ||
Line 42: | Line 39: | ||
} | } | ||
!/^$/ {st=0} | !/^$/ {st=0} | ||
- | + | </code><code> | |
- | $ awk -f ex1.awk /var/mail/uX | + | $ awk -f ex1.awk /var/mail/user1 |
+ | </code><code> | ||
String 1 | String 1 | ||
- | From u0@server.class Tue Oct 18 10:05:44 2005 | + | From user1@host19.class.un Wed Feb 15 05:41:42 2012 |
- | String 21 | + | String 19 |
- | From u0@server.class Tue Oct 18 10:05:49 2005 | + | From user2@host19.class.un Wed Feb 15 05:41:58 2012 |
- | String 41 | + | </code><code> |
- | From u5@server.class Tue Oct 18 10:05:49 2005 | + | |
Переслать отдельное письмо: | Переслать отдельное письмо: | ||
- | tail -n +21 /var/mail/uX | formail -1 -s sendmail val@bmstu.ru | + | tail -n +21 /var/mail/user1 | formail -1 -s sendmail val@bmstu.ru |
+ | </code> | ||
+ | |||
+ | |||
+ | ===== Подсчет количества элементов ===== | ||
+ | <code> | ||
+ | $ cat list_ip.txt | ||
+ | </code><code> | ||
+ | 172.16.1.5 | ||
+ | 172.16.1.3 | ||
+ | 172.16.1.5 | ||
+ | 172.16.1.1 | ||
+ | 172.16.1.5 | ||
+ | 172.16.1.1 | ||
+ | </code><code> | ||
+ | $ cat list_ip.txt | awk '{M[$1]+=1}END{for (i in M) {print M[i] " " i}}' | sort -n | ||
</code> | </code> | ||
===== Отчет по суммарному количеству товаров на складе ===== | ===== Отчет по суммарному количеству товаров на складе ===== | ||
<code> | <code> | ||
- | $ vi wares.txt | ||
- | |||
$ cat wares.txt | $ cat wares.txt | ||
+ | </code><code> | ||
table:34 | table:34 | ||
car:24 | car:24 | ||
apple:23 | apple:23 | ||
car:12 | car:12 | ||
- | + | </code><code> | |
- | $ vi ex2.awk | + | |
$ cat ex2.awk | $ cat ex2.awk | ||
+ | </code><code> | ||
{ | { | ||
M[$1]+=$2 | M[$1]+=$2 | ||
Line 77: | Line 86: | ||
} | } | ||
} | } | ||
+ | </code><code> | ||
$ awk -F: -f ex2.awk wares.txt | $ awk -F: -f ex2.awk wares.txt | ||
+ | </code><code> | ||
sum apple=23 | sum apple=23 | ||
sum car=36 | sum car=36 | ||
sum table=34 | sum table=34 | ||
</code> | </code> |