Главная / Продвижение сайта / Лайфхаки / awk в буднях админа +

awk в буднях админа +


14.09.2015 18:39755

   В повседневной жизни администратора Linux систем работа с лог-файлами занимает немаловажную роль. Порою только лог файл может показать что случилось и почему. В большинстве своем лог файлы это текстовые файлы с которыми удобно работать с помощью различных стандартных утилит присутствующих в стандартных установках если не всех, то большинства дистрибутивов. В данной статье я хочу показать только одну из утилит работающих с текстом awk. 

  Как любезно говорит нам wiki: «Название AWK складывается из инициалов разработчиков языка: Alfred V. Aho, Peter J. Weinberger и Brian W. Kernighan. Первая версия AWK была написана в 1977 в AT&T Bell Laboratories.». 

awk представляет собой редактор текста «налету», т. е. по приведенному шаблону позволяет обработать текст подаваемый ей на вход. 

так: 

awk ‘{print($1)}’ /home/user1/file1.txt 

где последним аргументом командной строки является указание на файл /home/user1/file1.txt 

или так: 



w awk ‘{print($1)}’ 

где входной текст передается в awk через конвейер (pipe, символ и является результатом вывода команды w 

Для обработки текста утилите надо сказать что с ним делать дать программу. Программа может быть записана в отдельный файл и передана awk через ключ -f: 

w awk -f /home/user1/view_1col_awk.txt 

где файл /home/user1/view_1col_awk.txt содержит print($1)

 

{

print($1) 

}’ 

или помещаться прямо в командной строке: 

w awk ‘{print($1)}’ 

Вот реальные примеры использования этой утилиты: 

cat /var/log/squid/access.log awk ‘{print($4″ «$5)}’ 

в данном случае мы получим на вывод содержимое 4ого и 5ого столбцов из файла /var/log/squid/access.log 

Но awk позволяет проводить над текстом и более сложные действия, как в следующем примере, где из лог-файла берутся значение 3его столбца и сумма 5ого и в итоге мы получаем таблицу основных потребителей интернета, отсортированную по убыванию (кто же забил весь канал

cat /var/log/squid/access.log|awk ‘{sum[$3] $5} END {for(i in sum) {print sum[i]» «i}}’|sort -r -n |head -n 30 

где sum[..] массив с элементами состоящими из имени ячейки (поле $3 входного файла) и ее значения (сумма полей $5), 

после подсчета сумм наступает очередь завершающей части скрипта (END), в которой расположен цикл проходящий по всем ячейкам массива и выдающим на выход результат в виде «СУММА ИМЯ_ПОЛЬЗОВАТЕЛЯ» 

внешние утилиты 
sort -r -n сортирует данные по численным значениям (-n) в обратном порядке (-r от большего к меньшему) 
head -n 30 показывает только 30 верхних строк 

Вот еще один пример практического применения awk подсчет используемых файловых дескрипторов процессами системы: 

lsof| awk ‘{sum[$1] 1} END {for(i in sum) {print sum[i], i}}’|sort -nr|head

 


Лайфаки





«awk в буднях админа +» - Похожие страницы

Нет записей


Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям