Linux中awk工具的使用详解( 二 )


$3表示文本行被分割后的第 3 个字段列
$n表示文本行被分割后的第 n 个字段列
NR表示文件中的行号,表示当前是第几行
NF表示文件中的当前行列的个数,类似于 mysql 数据表里面每一条记录有多少个字段
FS表示 awk 的输入分隔符,默认分隔符为空格和制表符,你可以对其进行自定义设置
OFS表示 awk 的输出分隔符,默认为空格,你也可以对其进行自定义设置
表示当前文件的文件名称,如果同时处理多个文件,它也表示当前文件名称
比如我们有这么一个文本文件 fruit.txt 内容如下,我将用它来向你演示如何使用 awk 命令工具,顺便活跃一下此时尴尬的气氛 。。
peach100Mar1997ChinaLemon150Jan1986AmericaPear240Mar1990Janpanavocado120Feb2008china
我们来瞧一瞧下面这些简单到爆炸的例子,这个表示打印输出文件的每一整行的内容
$ awk '{print $0}' fruit.txtpeach100Mar1997ChinaLemon150Jan1986AmericaPear240Mar1990Janpanavocado120Feb2008china
下面这个表示打印输出文件的每一行的第 1 列内容
$ awk '{print $1}' fruit.txtpeachLemonPearavocado
下面面这个表示打印输出文件的每一行的第 1 列、第 2 列和第 3 列内容
$ awk '{print $1, $2, $3}' fruit.txtpeach 100 MarLemon 150 JanPear 240 Maravocado 120 Feb
其中加入的逗号表示插入输出分隔符,也就是默认的空格
文件的每一行的每一列的内容除了可以用 print 命令打印输出以外,还可以对其进行赋值
$ awk '{$2 = "***"; print $0}' fruit.txtpeach *** Mar 1997 ChinaLemon *** Jan 1986 AmericaPear *** Mar 1990 Janpanavocado *** Feb 2008 china
上面的例子就是表示通过对$2变量进行重新赋值,来隐藏每一行的第 2 列内容,并且用星号*来代替其输出
在参数列表中加入一些字符串或者转义字符之类的东东
$ awk '{print $1 "\t" $2 "\t" $3}' fruit.txtpeach100MarLemon150JanPear240Maravocado 120Feb
像上面这样,你可以在print的参数列表中加入一些字符串或者转义字符之类的东东,让输出的内容格式更漂亮,但一定要记住要使用双引号 。
awk 内置 NR 变量表示每一行的行号
$ awk '{print NR "\t" $0}' fruit.txt1peach100Mar1997China2Lemon150Jan1986America3Pear240Mar1990Janpan4avocado120Feb2008china