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