[Энциклопедия объяснений команд Linux] Метод использования встроенных переменных 050.awk и подробный анализ различных операторов

встроенные переменные awk (предопределенные переменные)

Пояснение: [A][N][P][G] указывает первый инструмент, поддерживающий переменные, [A]=awk, [N]=nawk, [P]=POSIXawk, [G]=gawk

  • $n n -е поле текущей записи, например, если n равно 1, это означает первое поле, а если n равно 2, это означает второе поле.
  • $0 Эта переменная содержит текстовое содержимое текущей строки во время выполнения.
  • [N] Количество аргументов командной строки ARGC .
  • [G] Позиция текущего файла в командной строке ARGIND (считая с 0).
  • [N] ARGV Массив, содержащий аргументы командной строки.
  • [G] Формат цифрового преобразования CONVFMT (по умолчанию %.6g).
  • [P] Ассоциативный массив переменных среды ENVIRON .
  • [N] ERRNO Описание последней системной ошибки.
  • [G] FIELDWIDTHS Список ширины поля (через пробел).
  • [A] FILENAME Имя текущего входного файла.
  • [P] FNR — то же самое, что и NR, но относительно текущего файла.
  • [A] Разделитель полей FS (по умолчанию — любой пробел).
  • [G] IGNORECASE Если true, совпадение независимо от регистра.
  • [A] NF указывает количество полей, которое соответствует текущему количеству полей во время выполнения.
  • [A] NR представляет количество записей, которое соответствует текущему номеру строки во время выполнения.
  • [A] Формат вывода цифр OFMT (по умолчанию %.6g).
  • [A] Разделитель выходных полей OFS (по умолчанию — пробел).
  • [A] Разделитель выходных записей ORS (по умолчанию — новая строка).
  • [A] Разделитель записей RS (по умолчанию — новая строка).
  • [N] RSTART Первая позиция строки, сопоставленная функции match.
  • [N] RLENGTH Длина строки, сопоставленной с помощью функции сопоставления.
  • [N] Разделитель индексов массива SUBSEP (значение по умолчанию — 34).

escape-последовательность

  • \ \ сам
  • $ побег $
  • \t символ табуляции
  • \b символ возврата
  • \r возврат каретки
  • \n разрыв строки
  • \c отменить перенос строки

пример

echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}'

Результат вывода:

Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7

Используйте print NF, чтобы распечатать последнее поле в строке, используйте NF, чтобы распечатать последнее поле в строке, используйтеNF может распечатать последнее поле в строке, использовать (NF-1) для печати предпоследнего поля и так далее:

echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}'

Результат вывода:

f3
f5
echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}'

Результат вывода:

f2
f4

Распечатайте второе и третье поля каждой строки:

awk '{ print $2,$3 }' filename

Подсчитайте количество строк в файле:

awk 'END{ print NR }' filename

Приведенная выше команда использует только блок операторов END. При чтении каждой строки awk обновляет NR до соответствующего номера строки. Когда достигается последняя строка, значение NR является номером последней строки, поэтому NR в блок операторов END — это количество строк в файле.

Пример накопления значения первого поля в каждой строке:

seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }'

Результат вывода:

总和:
1+
2+
3+
4+
5+
等于
15

Передать значение внешней переменной в awk

Внешние значения (не из стандартного ввода) можно передать в awk с опцией -v:

VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'

Другой способ передачи внешних переменных:

var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2

Используйте, когда ввод осуществляется из файла:

awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename

Найдите pid процесса

netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'

работа и суждение awk

Одна из характеристик, которыми должен обладать язык программирования, awk поддерживает множество операций, которые по сути такие же, как и в языке C. Awk также предоставляет ряд встроенных операционных функций (таких как log, sqr, cos, sin и т. д.) и некоторые функции (например, length, substr и т. д.) для строковых операций (операций). Использование этих функций значительно улучшило работу awk. Как часть инструкций условного переноса, оценка отношений является функцией каждого языка программирования, и awk не является исключением. Awk допускает несколько тестов. В качестве соответствия стиля он также предоставляет выражения сопоставления с образцом (сопоставление) и ! (Несоответствие ) . В качестве расширения тестирования awk также поддерживает логические операторы.

арифметический оператор

описание оператора

    • добавить, вычесть
  • /& умножение, деление и остаток
    • !Унарное сложение, вычитание и логическое отрицание
      ^ *** Возведение в степень
      ++ – увеличение или уменьшение, как префикс или суффикс

пример:

awk 'BEGIN{a="b";print a++,++a;}'

Результат вывода:

0 2

Примечание. Все операции используются как арифметические операторы, операнды автоматически преобразуются в значения, а все незначения преобразуются в 0.

оператор присваивания

Описание оператора
= += -= *= /= %= ^= **= оператор присваивания

пример:

a+=5; 等价于:a=a+5; 其它同类

Логические операторы

Описание оператора
|| Логическое ИЛИ
&& Логическое И

пример:

awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'

Результат вывода:

0 1

постоянный оператор

описание оператора
!~ соответствует регулярному выражению и не соответствует регулярному выражению
^ начало строки
$ конец строки
Любой одиночный символ, кроме новой строки
  • Ноль или более начальных символов
    .* Все символы
    [] Любой символ в группе символов
    [^] Отменяет каждый символ в группе символов (не соответствует каждому символу в группе символов)
    [ ] Группа, не содержащая символов Строки
    [az] строчные буквы [ AZ [0-9] цифры[aZ] строчные и прописные буквы
    ] прописные буквы должен быть окружен /regular/




пример:

awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'

Результат вывода:

ok

оператор отношения

Описание оператора
< <= > >= != == реляционные операторы

пример:

awk 'BEGIN{a=11;if(a >= 9){print "ok";}}'

Результат вывода:

ok

Примечание: > < может использоваться как для сравнения строк, так и для числового сравнения. Ключевым моментом является то, что если операнд является строкой, он будет преобразован в сравнение строк. Оба являются числами до преобразования в числовое сравнение. Сравнение строк: сравнение в порядке ASCII.

другие операторы

Описание оператора
$ Ссылка на поле Пространство
Строковый соединитель
?: Условное выражение C
в Существует ли определенный ключ в массиве

пример:

awk 'BEGIN{a="b";print a=="b"?"ok":"err";}'

Результат вывода:

ok
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}'

Результат вывода:

0
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'

Результат вывода:

1

Таблица оперативных приоритетов

!Чем выше уровень, тем выше приоритет.
Чем выше уровень, тем выше приоритет.

Расширенный ввод и вывод Awk
Чтение следующей записи
. В awk используется следующий оператор: сопоставление построчно в цикле. Если встречается следующий, текущая строка будет пропущена, а следующий оператор будет игнорироваться напрямую. Вместо этого сопоставляется следующая строка. Следующий оператор обычно используется для слияния нескольких строк:

cat text.txt
a
b
c
d
e

awk 'NR%2==1{next}{print NR,$0;}' text.txt

Если номер строки записи делится на 2 и остаток равен 1, текущая строка пропускается. Следующий вывод NR, $0 также не будет выполнен. В начале следующей строки программа начинает оценивать значение NR%2. В это время номер строки записи: 2, и будет выполнен следующий блок операторов: «print NR,$0»

Анализ показал, что строку, содержащую слово «web», нужно пропустить, а затем объединить контент в одну строку со следующей строкой:

cat text.txt
web01[192.168.2.100]
httpd            ok
tomcat               ok
sendmail               ok
web02[192.168.2.101]
httpd            ok
postfix               ok
web03[192.168.2.102]
mysqld            ok
httpd               ok
0

awk '/^web/{T=$0;next;}{print T":"t,$0;}' text.txt

Просто прочитайте запись

Использование Awk getline: функция getline необходима для перенаправления вывода. getline принимает входные данные из стандартного ввода, канала или другого входного файла, отличного от того, который обрабатывается в данный момент. Он отвечает за получение содержимого следующей строки со входа и присвоение значений встроенным переменным, таким как NF, NR и FNR. Функция getline возвращает 1, если получена запись, 0, если достигнут конец файла, и -1, если произошла ошибка, например, не удалось открыть файл.

Синтаксис getline: getline var, переменная var содержит содержимое определенной строки.

Awk getline в целом, инструкция по использованию:

  • Когда вокруг него нет символа перенаправления | или <: getline действует с текущим файлом и считывает первую строку текущего файла в следующую переменную var или $0 (нет переменной). Следует отметить, что, поскольку awk уже обработал getline Строка читается, поэтому возвращаемый результат getline чересстрочный.
  • Когда слева и справа есть символы перенаправления | или <: getline действует на направленный входной файл. Поскольку файл только что открыт, он не считывается в строку с помощью awk, но getline считывает, затем getline возвращает первую строку строки файла, а не каждой второй строки.

Пример:

Выполните команду date в Linux и выведите ее в getline через конвейер, затем назначьте вывод пользовательской переменной out и распечатайте его:

awk 'BEGIN{ "date" | getline out; print out }' test

Выполните команду оболочки date и выведите ее в getline через конвейер, затем getline считывает из конвейера и присваивает входные данные out, функция разделения преобразует переменную out в массив mon, а затем печатает второй элемент массива. Пн:

awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test

Выходные данные команды ls передаются в geline в качестве входных данных, и цикл заставляет getline считывать строку из выходных данных ls и выводить ее на экран. Здесь нет входного файла, поскольку блок BEGIN выполняется перед открытием входного файла, поэтому входной файл можно игнорировать.

awk 'BEGIN{ while( "ls" | getline) print }'

закрыть файл

Awk позволяет закрывать входной или выходной файл в программе с помощью оператора закрытия awk.

close("filename")

имя_файла может быть файлом, открытым с помощью getline, или стандартным вводом, переменной, содержащей имя файла, или точной командой, используемой getline. или выходной файл, который может быть стандартным выводом, переменной, содержащей имя файла или точную команду, используя канал.

Вывод в файл
awk позволяет выводить результаты в файл следующим образом:

echo | awk '{printf("hello word!n") > "datafile"}'
# 或
echo | awk '{printf("hello word!n") >> "datafile"}'

Учитесь с нуляpython

[Изучение Python с нуля] 92. Используйте библиотеку запросов Python для отправки HTTP-запросов и обработки ответов
[Изучение Python с нуля] 91. Используйте декораторы и словари для управления простыми веб-приложениями для путей запросов
[Изучите Python с нуля] 93. Используйте управление словарями Путь запроса
[Изучение Python с нуля] 89. Используйте WSGI для создания простого и эффективного веб-сервера
[Изучение Python с нуля] 88. Подробное объяснение интерфейса WSGI: реализация простой и эффективной веб-разработки
[Изучение Python с нуля] 87. Сборка вручную HTTP-сервер Реализация Python и многопоточная параллельная обработка
[изучение Python с нуля] 86. Углубленное понимание протокола HTTP и его роли во взаимодействии браузера и сервера
[изучение Python с нуля] 85. Применение технологии параллельных вычислений пула процессов Python
[ изучение Python с нуля] 84. Углубленное понимание потоков и процессов
[изучение Python с нуля] 83. Многопроцессное программирование Python и использование пулов процессов
[изучение Python с нуля] 82. Реализация чат-программ на основе мульти- многопоточность
[изучение Python с нуля] 81. Python и многое другое. Применение потоковой связи и очередей
[обучение Python с нуля] 80. Потоковый доступ к глобальным переменным и проблемы безопасности потоков
[обучение Python с нуля] 79. Потоковый доступ к глобальным переменным и потоку вопросы безопасности
[изучение Python с нуля] 78. Случаи загрузки файлов
[Изучение Python с нуля] 77. Программирование TCP-сервера и меры предосторожности
[изучение Python с нуля] 76. Сервер и клиент: ключевые компоненты сетевой связи
[изучение Python с нуля] 75 Протокол TCP: надежный протокол связи уровня передачи, ориентированный на соединение.
[Изучение Python с нуля] 74. Сетевая программа UDP: подробное объяснение проблем с портами и информация о привязке
[Изучение Python с нуля] 73. Сетевая программа UDP — отправка данных
[Изучение Python с нуля] 72. Углубленное понимание связи через сокет и создание сокета Метод
[изучение Python с нуля] 71. Сетевые порты и их функции
[изучение Python с нуля] 70. Методы сетевой связи и их применение: от прямой связи с маршрутизаторами до соединения нескольких сетей
[изучение Python с нуля] 69. Анализ сетевой связи и классификации IP-адресов
[изучение Python с нуля] 68. Жадные и нежадные режимы в регулярных выражениях Python
[изучение Python с нуля] 67. Модуль re в Python: технология регулярной замены и расширенного сопоставления
[изучение Python с нуля] 66. Углубленное понимание регулярных выражений: мощный инструмент для сопоставления с образцом и обработки текста
[Изучение Python с нуля] 65. Подробное объяснение модификаторов регулярных выражений Python и их применения
[Изучение Python с нуля] 64. Метод re.compile в регулярных выражениях Python Подробное объяснение
[изучение Python с нуля] 63. Введение в класс re.Match в регулярных выражениях, его атрибуты и методы
[изучение Python с нуля] 62. Регулярные выражения Python: мощный инструмент сопоставления строк
[изучение Python с нуля] ноль] 61. Подробное объяснение и примеры применения атрибутов свойств в Python
[изучение Python с нуля] 60. Генератор исследований: гибкий инструмент для итерации
[изучение Python с нуля] 59. Итератор: эффективный инструмент для оптимизации обхода данных
[обучение Python с нуля] 58. Пользовательские исключения в Python и методы их возникновения.
[Изучение Python с нуля] 57. Используйте ключевое слово with в Python, чтобы правильно закрывать ресурсы
[Изучение Python с нуля] 56. Важность и применение обработки исключений в программировании
[Изучение Python с нуля] 55. Сериализация и обработка в Python Десериализация, применение модулей JSON и Pickle
[изучение Python с нуля] 54. Запись данных в память
[изучение Python с нуля] 53. Файлы CSV и CSV-модули Python
[изучение Python с нуля] 52. Чтение и запись файлов — Руководство по работе с файлами Python
[ изучение Python с нуля] 51. Открытие и закрытие файлов и их применение в Python
[изучение Python с нуля] 49. Встроенные функции, связанные с объектами в Python, и их использование
[изучение Python с нуля] 48. Подробное объяснение наследования и множественности наследование в Python
[изучение Python с нуля] 47. Понятие и основы использования наследования в объектно-ориентированном программировании
[изучение Python с нуля] 46. Анализ методов __new__ и __init__ и синглтон в шаблонах проектирования Python
[изучение Python с нуля] 45. Методы класса и статические методы в Python
[изучение Python с нуля] 44. Частные атрибуты и методы в объектно-ориентированном программировании
[изучение Python с нуля] 43. Примеры в объектно-ориентированном программировании на Python Атрибуты и атрибуты класса
[Изучение Python с нуля] 42 Встроенные атрибуты и методы Python
[Изучение Python с нуля] 41. Волшебный метод Python (2)
[Изучение Python с нуля] 40. Волшебный метод Python (1)
[Изучение Python с нуля] 39. Объектно-ориентированная базовая грамматика и примеры приложений
[Изучение Python с нуля] 38. Использование и импорт пакетов Python
[Изучение Python с нуля] 37. Использование пользовательских модулей Python и меры предосторожности
[С нуля Изучение Python ] 36. Методы и навыки использования pip в Python для управления сторонними пакетами
[изучение Python с нуля] 35. Общие системные модули Python и их использование
[изучение Python с нуля] 34. Подробное объяснение импорта и использования модулей Python
[Изучить Python с нуля] 33. Роль декораторов (2)
[Изучить Python с нуля] 32. Роль декораторов (1)
[Изучить Python с нуля] 31. Глубокое понимание функций высшего порядка и замыканий в Python
[с нулевого изучения Python] 30. Углубленное понимание рекурсивных функций и анонимных функций
[изучение Python с нуля] 29. «Подробное объяснение параметров функций» — понимание различных вариантов использования параметров функций Python
[изучение Python с нуля] 28 Локальные переменные и глобальные переменные в Python Переменные
[Изучение Python с нуля] 27. Использование и вложенные вызовы функций Python
[Изучение Python с нуля] 25. Функции: инструмент для повышения эффективности написания кода
[Изучение Python с нуля] 24. Операции со строками и методы обхода в Python
[Изучение Python с нуля] 23. Как использовать и распространенные операции с множествами (множествами) в Python
[Изучение Python с нуля] 22. Добавление, удаление, модификация и запрос словарей в Python и переменных словарей
[ Изучите Python с нуля] 21. В кортежах и словарях Python для
[Изучение Python с нуля] 20. Навыки и примеры работы со списками Python
[Изучение Python с нуля] 19. Применение циклического перебора списков и вложения списков
[Изучение Python с нуля] 18. Подробное объяснение основных операций со списками Python (1)
[ С нулевого изучения Python] 17. Метод форматирования строки Python (2)
[Изучение Python с нуля] 16. Метод форматирования строки Python (1)
[Изучение Python с нуля] 15. Углубленное понимание кодировки строк и набора символов
[ с нуля изучения Python] 14. Общие операции со строками Python (2)
[Изучение Python с нуля] 13. Общие операции со строками Python (1)
[Изучение Python с нуля] 12. Операции со строками Python и приложения
[Изучение Python с нуля] 11. Оператор цикла Python и поток управления
[изучить Python с нуля] 10. Подробное объяснение условного оператора Python и вложенности
[изучить Python с нуля] 09. Оператор условного суждения в Python
[изучить Python с нуля] 08. Python понимает битовые операции Операторы, приоритет оператора
[изучить Python с нуля] 07. Подробное объяснение операторов Python: операторы присваивания, сравнения и логические операторы
[изучить Python с нуля] 06. Использовать арифметические операторы в Python для вычислений и объединения строк
[обучить Python с нуля] 05. Вывод и ввод в Python
[изучить Python с нуля] 04. Основы программирования на Python: переменные, типы данных и идентификаторы
[изучить Python с нуля] 03. Интерактивное программирование на Python и подробные аннотации
[Изучение Python с нуля] 02. Введение в инструменты разработки
[Изучение Python с нуля] 01. Установка и настройка Python

Supongo que te gusta

Origin blog.csdn.net/qq_33681891/article/details/132661800
Recomendado
Clasificación