AWK简单介绍


AWK 是什么

  • AWK is a programming language designed for text processing and typically used as a data extraction and reporting tool.
    ( AWK是一门为文本处理而设计,通常用于数据分析和报表工具的程序语言。)
    https://en.wikipedia.org/wiki/AWK

  • AWK是一种优良的**文本处理工具**,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。

    https://zh.wikipedia.org/wiki/AWK

出现背景

  • 时间: 1977年
  • 人物: Alfred Aho, Peter Weinberger, and Brian Kernighan
    (译作: 阿尔佛雷德·艾侯彼得·温伯格布莱恩·柯林汉
  • 功能: 用于文本处理 (按行处理)

参数形式

模式 { 行为 } | pattern { ACTIONS }

例如: awk ‘BEGIN { print “Hello wold!” }’

输出: Hellow wold!

输出命令

输出当前记录(默认空格分割)的第一,第二,第三个块字符串($0代表一整行)

print $1,$2,$3

内置变量

  1. (Field),$1, $2, $3 第一,第二,第三块字符串 ($0 represents the entire record)
  2. NR: 当前记录数
  3. NF: 总记录数
  4. FILENAME: 包含当前文件
  5. FS: 分割付,默认一个空格,等价于命令行 -F选项
  6. RS: 保存当前记录分隔符.默认换行.
  7. OFS: 保存输出字段分隔符.默认空格.
  8. ORS: 保存输出行分隔符. 默认换行.
  9. OFMT: 保持格式化后的数字. 默认格式”%.6g”.

示例:

BEGIN { # Can be modified by the user
   FS = ","; # Field Separator
   RS = "n"; # Record Separator (lines)
   OFS = " "; # Output Field Separator
   ORS = "n"; # Output Record Separator (lines)
}
{ # Can't be modified by the user
   NF # Number of Fields in the current Record (line)
   NR # Number of Records seen so far
   ARGV / ARGC # Script Arguments
}

行为

  { print $0; } # prints $0. In this case, equivalent to 'print' alone
  { exit; } # ends the program
  { next; } # skips to the next line of input
  { a=$1; b=$0 } # variable assignment
  { c[$1] = $2 } # variable assignment (array)
  { if (BOOLEAN) { ACTION }  
    else if (BOOLEAN) { ACTION }  
    else { ACTION }  
  }
  &#123; for (i=1; i<x; i++) &#123; ACTION &#125; &#125;
  &#123; for (item in c) &#123; ACTION &#125; &#125;

BEGIN/END 规则 ^1

  • A BEGIN rule is executed once only, before the first input record is read.
    仅在所有的行都输入到文件之前进行匹配。

  • an END rule is executed once only, after all the input is read.
    在所有的输入都被处理完后进行匹配。

awk 'BEGIN &#123;print "Hello wold!"&#125; END &#123;print "AWK!!"&#125;' filenames
# 输出 Hello wold!\nAWK!!

常用命令

awk --version  # 查看版本
awk ‘BEGIN &#123; print “Hello wold!” &#125;’  # 输出 Hello world

参考文档


Author: Itaken
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Itaken !
  TOC目录