Библиотека сайта rus-linux.net
Шесть трюков с awk
Оригинал: "6 Tricks with awk"Автор: Riccardo Capecchi
Дата публикации: January 18, 2011
Перевод: Н.Ромоданов
Дата перевода: февраль 2011 г.
Awk всегда был для меня источником большой ненависти и любви, это невероятно мощная команда, с помощью которой можно создавать реальные программы.
В этой статье я расскажу вам о шести примерах, готовых для использования в выбранном вами терминале
AWK является языком программирования, управляемый данными (data driven), который разработан для обработки текстовых данных, либо в файлах либо в потоках данных. Это пример языка программирования, который широко используется для обработки данных строкового типа, ассоциативных массивов (то есть, массивов индексированных строковыми ключами) и регулярных выражений.
AWK является одним из самых первых инструментальных средств, который появится в Version 7 Unix и завоевал популярность как способ добавить вычислительные возможности для конвейеров Unix. Одна из версий языка AWK является стандартной функцией почти в каждой современной Unix-подобной операционной системе, имеющейся в настоящее время. AWK упоминается в спецификации Single UNIX как одна из обязательных утилит операционной системы Unix. Кроме оболочки Bourne, AWK является еще одним скриптовым языком, доступным в стандартной среде Unix. Он также присутствует среди команд, которые требуются согласно спецификации Linux Standard Base.
Реализации AWK существуют в виде предварительного установленного программного обеспечения почти во всех других операционных системах.
Мощность, краткость и ограничения ранних программ на AWK заставили Ларри Уолла написать язык Perl, который был определен как новый, более мощный POSIX AWK и gawk (GNU AWK). Хотя AWK и sed были предназначены для создания одностроковых программ, даже в самом начале пользователи AWK в Bell Labs часто писали хорошо структурированные большие программы на языке AWK.
1. Удаляем в файле дублирующие записи и не используем сортировку
Если использовать awk, можно найти дублирующие записи в неотсортированном файле, причем файл не будет переупорядочен, а найденные и удаленные записи затем можно перенаправить в другой файл.
#awk '!x[$0]++'
Пример
echo -e "aaa\nbbb\naaa\naa\nccc\naa"|awk \!'x[$0]++'
Будет выдано:
aaa bbb aa ccc
2. Вычисляем общий размер выбранной группы файлов
С помощью этой команды вы можете выбрать некоторые файлы и подсчитать их суммарный размер, например, подсчитать сумму размера всех файлов в текущем директории:
ls -l | awk '{s = s+$5 }; END { print s }'
или суммировать все ваши файлы mp3, имеющиеся в текущем директории и поддиректориях:
ls -lR |grep .mp3 | awk '{s = s+$5 }; END { print s }'
И так далее, просто измените вашу команду ls и вы можете выбрать другое имя или тип файлов.
3. Оцениваем результат поиска файлов
Ищем в вашем компьютере все ваши файлы mp3 и вычисляем их размер:
find / -name "*.mp3" -exec ls -l {} \; | awk '{s = s+$5 }; END { print s }'
4. Показать наиболее часто используемые команды в истории ваших команд history
Список команд, которые вы используете чаще всего:
history | awk '{a[$'`echo "1 2 $HISTTIMEFORMAT" | wc -w`']++}END{for(i in a){print a[i] "\t" i}}' | sort -rn | head
5. Анализируем поля awk
Разделим каждую строку на отдельные поля и перенумеруем их. Это действительно полезно, когда вы собираетесь разобрать что-то с помощью AWK, но не уверены точно, с чего начать.
awk '{print NR”: “$0; for(i=1;i<=NF;++i)print “\t”i”: “$i}'
6. Переименование некоторых файлов
Переименовываем некоторые файлы, имеющие расширение .new
ls -1 pattern | awk '{print "mv "$1" "$1".new"}' | sh
Вы можете изменить шаблон, чтобы просматривать и изменять только определенные типы файлов.