расширенная команда linux awk

расширенная команда linux awk

AWK - это язык для обработки текстовых файлов и мощный инструмент анализа текста.

Он называется AWK, потому что он берет первый символ фамилии трех основателей Альфреда Ахо, Питера Вайнбергера и Брайана Кернигана.
Мы используем ls -lзначение по умолчанию для вывода некоторых прав доступа к файлам, имен пользователей, размеров файлов и т. Д. Но иногда, что нам делать, если нам нужен форматированный вывод? В этом случае мы будем использовать awkкоманды.

Небольшой пример

$ ls -l
total 1395200
-rw-r--r-- 1 MagicBook 197121  60646319  112  2020 1.认识JVM的基本结构.mp4
-rw-r--r-- 1 MagicBook 197121 110583202  112  2020 10.垃圾收集器.mp4
-rw-r--r-- 1 MagicBook 197121 137221102  112  2020 11.收集器的选择.mp4
-rw-r--r-- 1 MagicBook 197121 204987941  112  2020 12.GC调优.mp4
-rw-r--r-- 1 MagicBook 197121  73189377  112  2020 2.虚拟机栈.mp4
-rw-r--r-- 1 MagicBook 197121  74493138  112  2020 3.程序计数器.mp4
-rw-r--r-- 1 MagicBook 197121 123329001  112  2020 4.方法区与堆.mp4
-rw-r--r-- 1 MagicBook 197121 207456340  112  2020 5.JVM性能调优监控工具.mp4
-rw-r--r-- 1 MagicBook 197121 143361728  112  2020 6.JVM最常问的面试题.mp4
-rw-r--r-- 1 MagicBook 197121  88398831  112  2020 7.类加载机制.mp4
-rw-r--r-- 1 MagicBook 197121 105331804  112  2020 8.GC算法和收集器.mp4
-rw-r--r-- 1 MagicBook 197121  98187492  112  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

runoob —— awk

синтаксис 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

рекомендация

отblog.csdn.net/e891377/article/details/108819210