UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
$ cat doubleawk 'FILENAME != prevfile { # new file NR = 1 # reset line number prevfile = FILENAME}NF > 0 { if ($1 == lastword) printf "double %s, file %s, line %dn" ,$1, FILENAME, NR for (i = 2; i <= NF; i++) if ($i == $(i-1)) printf "double %s, file %s, line %dn", $i, FILENAME, NR if (NF > 0) lastword = $NF}' $**$Операция
++--Встроенная переменная
FILENAMENRОператор
ifif (условие) оператор1else оператор2Если условие верно, то выполняется
оператор1оператор2Цикл
forshellfor (выражение1; условие; выражение2) операторЦикл
forawkВыражение1 while (условие) { оператор выражение2}Например, конструкция
for (i=2; i <= NF; i++)является циклом с
iNFОператор
breakwhileforcontinuewhileвыражению2fornextawkexitENDКак и в большинстве языков программирования, в
awkawk$ cat backwards# backwards: print input in backward line orderawk ' { line[NR] = $0 }END { for (i = NR; i > 0; i--) print line[i] } ' $*$Заметьте, что подобно переменным, массивы не нужно описывать; размер массива ограничен только объемом памяти, доступным на вашей машине. Конечно, если очень большой файл заносится в массив, в конце концов, это может привести к исчерпанию ресурсов памяти. Для печати конца большого файла в обратном порядке следует обратиться за помощью к команде
tail$ tail -5 /usr/dict/web2 | backwardszymurgyzymoticallyzymoticzymostheniczymosis$Команда
taillseektail-rbackwardsПри обычной обработке входная строка разбивается на поля. Эту операцию можно выполнить с помощью встроенной функции
splitn = split(s, arr, sep)Строка
sarrnsepFSsplit($0, а, ":")/etc/passwdsplit("9/29/83", date, "/")$ sed 1q /etc/passwd | awk '{split($0, a, ":"); print a[1]}'root$ echo 9/29/83 | awk '{split($0, date, "/"); print date[3]}'83$В табл. 4.5 перечислены встроенные функции
awkcos(expr) | Косинус expr |
exp(expr) | Возведение в степень expr |
getline() | Чтение следующей входной строки; возвращает 0 в случае конца файла, в противном случае 1 |
index(s1, s2) | Положение строки s2s1 |
int(expr) | Целая часть expr |
length(s) | Длина строки s |
log(expr) | Натуральный логарифм expr |
sin(expr) | Синус expr |
split(s, a, c) | Разбиение sа[1]a[n]cn |
sprintf(fmt, ...) | Форматирование в соответствии со спецификацией fmt |
substr(s,m,n) | Подстрока в nsm |
