简单输出

以下内容是一些经典的awk程序。

通常只会列出程序部分, 而不是整个命令行. 在任何情况下, 程序都可以用 引号包含起来放到 awk 命令的第一个参数中运行。 或者把它放到一个文件中使用 awk 的 -f 参数调用它。

在 awk 中仅仅只有两种数据类型: 数值字符构成的字符串

Awk 程序一次从输入文件的中读取一行内容并把它分割成一个个字段, 通常默认情况下:

  1. 一个字段是一个不包含任何空格制表符的连续字符序列.

  2. 当前输入的行中的第一个字段被称做 $1, 第二个是 $2, 以此类推。整个行的内容被定义为 $0每一行的字段数量可以不同

通常, 我们要做的仅仅只是打印出每一行中的某些字段, 也许还要做一些计算。

打印每一行

如果一个动作没有任何模式, 这个动作会对所有输入的行进行操作. print 语句用来打印(输出)当前输入的行:

# 会输出所有输入的内容到标准输出
{ print }  
{ print $0 }

打印特定字段

使用一个 print 语句可以在同一行中输出不止一个字段:

{ print $1,$3}   #有逗号,输出的两个字段之间有空格
{ print $1 $3}   #没有逗号,输出的两个字段之间没有空格,紧跟着的
  1. 在 print 语句中被逗号分割的表达式, 在默认情况下他们将会用一个空格分割来输出。

  2. 每一行 print 生成的内容都会以一个换行符作为结束。

  3. 但这些默认行为都可以自定义

NF,字段数量

AWk会对当前输入的行有多少个字段进行计数, 并且将当前行的字段数量存 储在一个内建的称作 NF 的变量中。

{ print NF,$1,$NF }   #依次打印出每一行的字段数量,每一个字段的值,最后一个字段的值

计算和打印

对字段的值进行计算后再打印出来:

{ print $1, $2 * $3 }

打印行号

Awk提供了另一个内建变量, 叫做 NR, 它会存储当前已经读取了多少行的计数。

{ print NR, $0 }    #打印每一行的行号和整行内容

在输出中添加内容

在字段中间或者计算的值中间打印输出想要的内容:

{ print "total pay for", $1, "is", $2 * $3 }

在打印语句中, 双引号内的文字将会在字段和计算的值中插入输出。

内建变量

变量

描述

$0

当前记录(这个变量中存放着整个行的内容)

$1~$n

当前记录的第n个字段,字段间由FS分隔

FS

输入字段分隔符 默认是空格或Tab (参数-F 也可用于指定分隔符,如-F:或-F '[:;]')

NF

当前记录中的字段个数,就是有多少列

NR

已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。

FNR

当前记录数,与NR不同的是,这个值会是各个文件自己的行号

RS

输入的记录分隔符, 默认为换行符

OFS

输出字段分隔符, 默认也是空格

ORS

输出的记录分隔符,默认为换行符

FILENAME

当前输入文件的名字

最后更新于

这有帮助吗?