AWK (GAWK)
AWK (GAWK)
Gawk - это GNU реализация AWK
mawk, … - новый AWK
много реализаций - разные ОС: UNIX, WIN, MAC
Входной язык процессора awk является в определенном смысле ''упрощенным'' C ,
предоставляя удобный операционный синтаксис
для строковых операций,
автоматическое преобразование строка-число,
автоматический лексический разбор входного
потока
и т.п.
Почти C
Бонус
Запуск awk-программы
нет input-file1
ввод со стандартного устройства ввода
( win: клавиатура , CTRL-Z )
Zapusk.bat gawk -f p2.awk spisok.txt > new.txt
Набор файлов:
Запуск примера из командного окна текущего каталога:
набрать в TotalCommander внизу - cmd
Запуск: >zapusk
Редактируем файл p2.awk
Текущая позиция
Предыдущая запись
запись конца файла
Запись - набор знаков, значений; читается или записывается целиком.
Работа awk
$0
пробел
\n
см. Пример 3 - запуск из файла
Программа
………….
Входной
Файл
………….
выполняется
много раз
шаблон { print }
вывод всей записи для каждого шаблона
Сравним примеры 3 и 3а
{ if( $0 ~ /Иванов/ ) print $0 }
/Иванов/
образец {действие}
Вывод (Печать)
Присваивание
Управляющая структура
Встроенная функция
Комментарии
# Print list of word frequencies
{
for (i = 1; i <= NF; i++)
freq[$i]++ # массив слов
}
END {
for (word in freq)
printf "%s\t%d\n", word, freq[word]
}
pr4
pr4a
Общее в awk
Ссылается на всю строку целиком
Запись (строка) считается разделенной на поля специальными символами (FS - FieldSeparator) - по умолчанию - символ пробела
максимально
Общее в awk
Общее в awk
NR – Number of Record
номер строки
NF – Number of Fields
число полей
gawk “{ print NR }” new.txt
gawk “{ print NR NF}” new.txt
!!! Вывод Без пробела: NRNF
y + “abc” - число
умолчание
= 0
= “”
Общее в awk
y “abc” - строка
вычисляемый номер поля
Общее в awk
используем значение поля
не объявляются
используются элементы массива, «как переменные»
индексация не числом, а полем (строкой)
# подсчёт частоты слов
{
for (i = 1; i <= NF; i++)
freq[$i] = freq[$i] +1 # массив «слов»
}
Общее в awk
(константы)
+ - * / % остаток
Общее в awk
x = 1.2 - число
x = “ab” - строка
константы
строка строка
Операция склейка строк
z = “ab” “cde”
z = “abcde”
Программа ( с пустым действием)
/Иванов/
напечатает из текстового файла те строки, которые содержат подстроку "Иванов" ( в том числе и "Ивановский машиностроительный завод" ).
см. Пример 3
шаблон
ЛОЖЬ – число 0
или пустая строка “”
"0" – истина , т.к. строка не пустая
~ Содержится
!~ Не содержится
< <= == != >= >
$0 ~ /Иванов/
$1 >= "s"
n >= 5
s, t, u, v...
шаблон
в строке содержится “Иванов”
строки, начинающиеся с символа s или следующих за ним по порядку
n >= 5 && n<10
n = 5, 6, 7, 8, 9
шаблон
в строке содержится “Иванов” или “Петров”
&& Логическое И
|| Логическое ИЛИ
! Логическое НЕ (отрицание)
выполняется
много раз =
количеству
строк
BEGIN { printf “СТАРТ\n” }
/Иванов/
END { printf “\nФИНИШ”}
шаблон
^ -- соответствует началу строки
/^A/ - строки, начинающиеся на A
$4 ~ /^Иванов/
$ -- соответствует концу строки.
/A$/ отвечает строкам, заканчивающимся на A.
$4 ~ /вна$/
шаблон
Регулярное выражение
/Иванов/
"^$" соответствует пустой строке.
шаблон
шаблон
шаблон
Символы, используемые в разных «шаблонах»
printf("Hello Word !!! \n");
как напечатать \ “ ?
\ddd строка до трех восьмеричных цифр (0 - 377)
\xdd строка шестнадцатеричных цифр (0 - FF)
Универсальный способ
Вывод (Печать)
Присваивание n = 1
Управляющая структура
Встроенная функция
print $1, $2 - значения полей выводятся через пробел
print $1 “abc” - выводится конкатенация значений полей
print “” – выводится пустая строка
формат вывода – по умолчанию
действие
Анализ условия на истинность, == 0
if (x % 2 == 0)
print "x is even"
else
print "x is odd"
действие
{
i = 1
while( i <= 3) {
print $i
i=i+1
}
}
действие
действие
инициализация задает инициализацию цикла
while (условие) проверка перед каждой итерацией
{
действие
приращение часть итерации
}
действие
# Ищем количество разных слов длиннее 10 знаков
END {
for (x in used)
if (length(x) > 10) {
num = num +1
}
print num, "words longer than 10 characters"
}
действие
continue
- для do, while, for
действие
действие
Строковые функции
действие
действие
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть