UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Таблица 4.5: Встроенные функции awk
Стандартной задачей обработки данных является получение суммарных значений для множества пар имя значение. Иными словами, по входному потоку типа
Susie 400John 100Mary 200Mary 300John 100Susie 100Mary 100мы хотим получить суммарные значения для каждого имени:
John 200Mary 600Susie 500Программа
awkawk {sum[$1] += $2}END {for (name in sum) print name sum [name]}задает всю программу подсчета n печати сумм для пар имя значение независимо от порядка следования этих пар. Каждое имя (
$1sumforsumforfor (перем in массив) операторХотя он может показаться вам искусственным, как цикл
forshellsort$ awk '...' | sort +1nrРеализация ассоциативной памяти предполагает хэширование, чтобы доступ к одному элементу занимал столько же времени, сколько и к любому другому, и чтобы это время не зависело (по крайней мере для массивов средних размеров) от числа элементов в массиве.
Использование ассоциативных массивов эффективно для вычислительных задач, таких, как подсчет частоты появления слов во входном потоке:
$ cat wordfreqawk ' { for (i = 1; i <= NF; i++) num[$i]++ }END {for (word in num) print word, num[word] }' $*$ wordfreq ch4.* | sort +1 -nr | sed 20q | 4the 372 .CW 345 of 220 is 185to 175 a 167 in 109 and 100.PI 94 .P2 94 .PP 90 $ 87awk 87 sed 83 that 76 for 75The 63 are 61 line 55 print 52$В первом цикле
fornum$iawkshellforВ результат действия команды
wordfreq.CWtrwordfreqwordfreqsed 's/[→][→]*//q' $* | sort | uniq -c | sort -nrХотя обе команды, и
sedawkawkfold$ cat тестКороткая строкаСтрока немного длиннееЭта строка еще длиннее, чем предыдущая строка$ fold тестКороткая строкаСтрока немного длиннееЭта строка еще длиннее, чем предыдущая строка$Вам может показаться странным, что в седьмой версии системы нет программы для добавления или удаления символов табуляции, хотя команда
prfoldsedawk# fold: fold long linessed 's/(->/ /g' $* | # convert tabs to spacesawk ' BEGIN { N = 80 # folds at column 80
