расширенная команда linux awk
AWK - это язык для обработки текстовых файлов и мощный инструмент анализа текста.
Он называется AWK, потому что он берет первый символ фамилии трех основателей Альфреда Ахо, Питера Вайнбергера и Брайана Кернигана.
Мы используем ls -l
значение по умолчанию для вывода некоторых прав доступа к файлам, имен пользователей, размеров файлов и т. Д. Но иногда, что нам делать, если нам нужен форматированный вывод? В этом случае мы будем использовать awk
команды.
Небольшой пример
$ ls -l
total 1395200
-rw-r--r-- 1 MagicBook 197121 60646319 1月 12 2020 1.认识JVM的基本结构.mp4
-rw-r--r-- 1 MagicBook 197121 110583202 1月 12 2020 10.垃圾收集器.mp4
-rw-r--r-- 1 MagicBook 197121 137221102 1月 12 2020 11.收集器的选择.mp4
-rw-r--r-- 1 MagicBook 197121 204987941 1月 12 2020 12.GC调优.mp4
-rw-r--r-- 1 MagicBook 197121 73189377 1月 12 2020 2.虚拟机栈.mp4
-rw-r--r-- 1 MagicBook 197121 74493138 1月 12 2020 3.程序计数器.mp4
-rw-r--r-- 1 MagicBook 197121 123329001 1月 12 2020 4.方法区与堆.mp4
-rw-r--r-- 1 MagicBook 197121 207456340 1月 12 2020 5.JVM性能调优监控工具.mp4
-rw-r--r-- 1 MagicBook 197121 143361728 1月 12 2020 6.JVM最常问的面试题.mp4
-rw-r--r-- 1 MagicBook 197121 88398831 1月 12 2020 7.类加载机制.mp4
-rw-r--r-- 1 MagicBook 197121 105331804 1月 12 2020 8.GC算法和收集器.mp4
-rw-r--r-- 1 MagicBook 197121 98187492 1月 12 2020 9.垃圾回收算法.mp4
$ ls -l | awk '{print $9}'
1.认识JVM的基本结构.mp4
10.垃圾收集器.mp4
11.收集器的选择.mp4
12.GC调优.mp4
2.虚拟机栈.mp4
3.程序计数器.mp4
4.方法区与堆.mp4
5.JVM性能调优监控工具.mp4
6.JVM最常问的面试题.mp4
7.类加载机制.mp4
8.GC算法和收集器.mp4
9.垃圾回收算法.mp4
синтаксис awk
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
Описание параметра опции:
- -F fs или --field-separator fs
указывает разделитель входного файла, fs - это строка или регулярное выражение, например -F :. - -v var = value или --asign var = value
Назначить пользовательскую переменную. - -f файл сценария или --file файл сценария
читать команды awk из файла сценария. - -mf nnn и -mr nnn
устанавливают собственные ограничения на значение nnn, опция -mf ограничивает максимальное количество блоков, выделяемых для nnn; опция -mr ограничивает максимальное количество записей. Эти две функции являются расширенными функциями версии awk от Bell Labs и не применимы в стандартном awk. - -W compact или --compat, -W Traditional или --traditional
Запускать awk в режиме совместимости. Так что поведение gawk точно такое же, как у стандартного awk, все расширения awk игнорируются. - -W copyleft или --copyleft, -W copyright или --copyright
печатать краткую информацию об авторских правах. - -W help или --help, -W usage или --usage
Вывести все параметры awk и краткое описание каждой из них. - -W lint или --lint
выводит предупреждения о структурах, которые нельзя перенести на традиционные платформы unix. - -W lint-old или --lint-old
выводит предупреждения о структурах, которые не могут быть перенесены на традиционные платформы unix. - -W posix
включает режим совместимости. Однако следующие ограничения не распознаются: / x, ключевые слова функции, func, escape-последовательность, и когда fs является пробелом, новая строка используется как разделитель полей; оператор and = не может заменить ^ и ^ =; fflush недопустим . - -W re-interval или --re-inerval
позволяет использовать интервальные регулярные выражения, например (класс символов Posix в grep), например выражение в скобках [[: alpha:]]. - -W исходный текст программы или --source текст
программы Использовать текст программы в качестве исходного кода, который можно смешивать с командой -f. - -W version или --version
Вывести версию отчета об ошибке.
Основное использование
Текстовое содержимое log.txt выглядит следующим образом:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
Использование 1:
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
Примеры:
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
# 格式化输出
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
Использование 2:
awk -F #-F相当于内置变量FS, 指定分割字符
Примеры:
# 使用","分割
$ awk -F, '{print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
# 或者使用内建变量
$ awk 'BEGIN{FS=","} {print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
# 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
$ awk -F '[ ,]' '{print $1,$2,$5}' log.txt
---------------------------------------------
2 this test
3 Are awk
This's a
10 There apple
Использование третье:
awk -v # 设置变量
Примеры:
$ awk -va=1 '{print $1,$1+a}' log.txt
---------------------------------------------
2 3
3 4
This's 1
10 11
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
Использование четвертое:
awk -f {awk脚本} {文件名}
Примеры:
$ awk -f cal.awk log.txt