This shows you the differences between two versions of the page.
Next revision | Previous revision Last revision Both sides next revision | ||
генератор_отчетов_awk [2009/03/02 13:06] val created |
генератор_отчетов_awk [2018/07/12 08:01] val [Выбор строк по числовому условию] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Генератор отчетов awk ====== | ====== Генератор отчетов awk ====== | ||
- | ===== Печать исходных данных без изменений ===== | ||
+ | * [[https://youtu.be/4PkkMzB7fIM|Видео: Генератор отчетов AWK]] | ||
+ | * [[https://ru.wikipedia.org/wiki/AWK|AWK в Википедии]] | ||
+ | * [[http://lib.ru/MAN/DEMOS210/awk.txt|Язык обработки структурированных текстов AWK]] | ||
+ | ===== Печать исходных данных без изменений ===== | ||
+ | <code> | ||
$ awk '{print}' /etc/passwd | $ awk '{print}' /etc/passwd | ||
+ | |||
$ awk '{print $0}' /etc/passwd | $ awk '{print $0}' /etc/passwd | ||
- | Фильтрация данных | + | $ awk -F: '{print $1 " " $7}' /etc/passwd |
+ | </code> | ||
+ | ===== Фильтрация данных ===== | ||
+ | <code> | ||
+ | $ awk '/^user/ {print $0}' /etc/passwd | ||
+ | </code> | ||
- | $ awk '/root/ {print $0}' /etc/passwd | + | ===== Использование разделителя полей и отрицательного условия ===== |
- | root:*:0:0:Charlie &:/root:/bin/csh | + | <code> |
- | toor:*:0:0:Bourne-again Superuser:/root: | + | $ awk -F: '!/sh$/ {print $1}' /etc/passwd |
- | daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin | + | </code> |
- | Использование разделителя полей и отрицательного условия | + | ===== Использование заголовков и итогов в отчетах, использование переменных ===== |
+ | <code> | ||
+ | $ awk -F: 'BEGIN {print "Users used /bin/sh:"; count=0} /bin\/sh$/ {print $1; count++} END {print "Summary:" count " users"}' /etc/passwd | ||
+ | </code> | ||
- | $ awk -F: '!/nologin/ {print $1}' /etc/passwd | + | ===== Обработка файла почтового ящика пользователя ===== |
- | # $FreeBSD | + | с какой строки начинается и от кого письмо |
- | # | + | <code> |
- | root | + | $ cat ex1.awk |
- | toor | + | </code><code> |
- | + | ||
- | Использование заголовков и итогов в отчетах, использование переменных. | + | |
- | + | ||
- | $ awk -F: 'BEGIN {print "Users used csh"; count=0} /csh$/ {print $1; count++} END {print count " users"}' /etc/passwd | + | |
- | + | ||
- | Обработка файла почтового ящика пользователя (с какой строки начинается и от кого письмо) | + | |
- | + | ||
- | $ ee ex1.awk | + | |
BEGIN {st=1} | BEGIN {st=1} | ||
/^$/ {st=1} | /^$/ {st=1} | ||
Line 34: | 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 |
+ | </code><code> | ||
+ | Переслать отдельное письмо: | ||
+ | |||
+ | tail -n +21 /var/mail/user1 | formail -1 -s sendmail val@bmstu.ru | ||
+ | </code> | ||
- | Отчет по суммарному количеству товаров на складе: | ||
- | $ cat > wares.txt | + | ===== Выбор строк по числовому условию ===== |
+ | |||
+ | * Пример назначения значений переменным и использования переменных окружения | ||
+ | * [[Команды фильтры#Вывод списка ip адресов из файла]] | ||
+ | |||
+ | <code> | ||
+ | $ cat list_count_ip.txt | ||
+ | </code><code> | ||
+ | 32 172.16.1.5 | ||
+ | 15 172.16.1.3 | ||
+ | 11 172.16.1.4 | ||
+ | 24 172.16.1.1 | ||
+ | </code><code> | ||
+ | $ COUNT=12 | ||
+ | |||
+ | $ cat list_count_ip.txt | awk -v c=$COUNT '{if ($1 > c) print $2}' | ||
+ | </code> | ||
+ | |||
+ | ===== Отчет по суммарному количеству товаров на складе ===== | ||
+ | <code> | ||
+ | $ cat wares.txt | ||
+ | </code><code> | ||
table:34 | table:34 | ||
car:24 | car:24 | ||
apple:23 | apple:23 | ||
car:12 | car:12 | ||
- | <Ctrl>-D | + | </code><code> |
- | + | $ cat ex2.awk | |
- | $ ee ex2.awk | + | </code><code> |
{ | { | ||
M[$1]+=$2 | M[$1]+=$2 | ||
Line 59: | Line 90: | ||
} | } | ||
} | } | ||
+ | </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> |