Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Работа в консоли Linux

Шесть трюков с 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

Вы можете изменить шаблон, чтобы просматривать и изменять только определенные типы файлов.