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: Нажмите что бы посмотреть