awk

AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。最简单地说,AWK是一种用于处理文本的编程语言工具。

语法

AWK程序是由一系列模式–动作对组成的

pattern { action }
pattern表示AWK在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。

{print} 会输出当前记录的内容。在AWK中,记录会被分割成“域”,它们可以被分别显示或使用

{print $1} 显示当前记录的第1个域

{print $1, $3} 显示当前记录的第1和第3个域,并以预定义的输出域分隔符(Output field separator, OFS)分隔,其默认值为一个空格符

{print $0} 显示当前记录的整个域

{print $NF} 显示最后一个域

{print $(NF-1)} 显示倒数第二个域

{sum+=$NF} END {print sum} 计算总和

-F 指定你的分隔符

内建变量

AWK的内建变量包括域变量,例如$1, $2, $3,以及$0。这些变量给出了记录中域的内容。内建变量也包括一些其他变量:

  • NR:已输入记录的条数。
  • NF:当前记录中域的个数。记录中最后一个域可以以$NF的方式引用。
  • FILENAME:当前输入文件的文件名。
  • FS:“域分隔符”,用于将输入记录分割成域。其默认值为“空白字符”,即空格和制表符。FS可以替换为其它字符,从而改变域分隔符。
  • RS:当前的“记录分隔符”。默认状态下,输入的每行都被作为一个记录,因此默认记录分隔符是换行符。
  • OFS:“输出域分隔符”,即分隔print命令的参数的符号。其默认值为空格。
  • ORS:“输出记录分隔符”,即每个print命令之间的符号。其默认值为换行符。
  • OFMT:“输出数字格式”(Format for numeric output),其默认值为”%.6g”。

示例

awk -F '"' 'NR==1,NR==2 BEGIN{ORS=""}{print $2}'

指定”为分隔符,指定范围为第一条至第二条,将记录分隔符的值替换为null,打印第二个域