Open penglongli opened 6 years ago
gawk 有一些内建的变量可以辅助使用者使用,使用者也可以自定义变量
内建变量又分为分隔符变量 和 数据变量,分隔符变量重点是为了对输入和输出进行格式化处理
分隔符变量
数据变量
分隔符变量包括:
下文以下述文件为例:
root@host-1:/tmp# cat test.txt Name:Zhangsan Sex:Male Age:22
FIELDWIDTHS 此参数主要用于取得每行的第 m ~ n 个字符
root@host-1:~# cat test.txt | gawk 'BEGIN{FIELDWIDTHS="3 2"}{print $1,$2}' Nam e: Sex :M Age :2
FS(输入字段分隔符)
仅拿第二列数据:
root@host-1:/tmp# cat test.txt | gawk 'BEGIN{FS=":"} {print $2}' Zhangsan Male 22
我们设置了FS 分隔符为 : ,因此会把每一行数据根据 FS 的值进行分割
FS
:
扩展
如果我们设置了 FS="\n" 会是什么结果?
FS="\n"
root@host-1:/tmp# cat test.txt | gawk 'BEGIN{FS="\n"} {print $1}' Name:Zhangsan Sex:Male Age:22
因为我们对每一行使用 \n 作为分隔符,所以输出了整行
\n
RS(输入数据行分隔符)
这个输入数据行分隔符其实很迷惑人,我们可以这么认为:
在传给 gawk 的一段输入数据中,默认以每一行作为一个输入行传递给 gawk;如果我们设置了 RS,我们可以以多行作为一个输入行传递给 gawk
我们为 test.txt 增加一份数据:
test.txt
root@host-1:/tmp# cat test.txt Name:Zhangsan Sex:Male Age:22 Name:Lisi Sex:Male Age:18
现在,我们想要知道文件中所有人的名字:
root@host-1:/tmp# cat test.txt | gawk 'BEGIN{RS=""} {print $1}' Name:Zhangsan Name:Lisi
我们设置了 RS="",以空白行作为输入行分隔符,因此 txt 文件中的两个人的所有属性分别会作为一个输入行传递给了 gawk
RS=""
OFS 与 ORS
我们以 test.txt 内容以下为例:
root@host-1:~# cat test.txt Name:Zhangsan Sex:Male Age:22
目标:把 : 换成 -
-
root@host-1:~# cat test.txt | gawk 'BEGIN{FS=":";OFS="-";ORS="\n"} {print $1,$2}' Name-Zhangsan Sex-Male Age-22
解释:以 : 作为字段分隔符,\n 换行符作为输出行分隔符,- 作为输出字段分隔符。
下列以数组的定义、遍历、删除来对数据进行说明
变量
gawk 有一些内建的变量可以辅助使用者使用,使用者也可以自定义变量
内建变量
内建变量又分为
分隔符变量
和数据变量
,分隔符变量重点是为了对输入和输出进行格式化处理分隔符变量
分隔符变量包括:
下文以下述文件为例:
FIELDWIDTHS 此参数主要用于取得每行的第 m ~ n 个字符
FS(输入字段分隔符)
仅拿第二列数据:
我们设置了
FS
分隔符为:
,因此会把每一行数据根据 FS 的值进行分割扩展
如果我们设置了
FS="\n"
会是什么结果?因为我们对每一行使用
\n
作为分隔符,所以输出了整行RS(输入数据行分隔符)
这个输入数据行分隔符其实很迷惑人,我们可以这么认为:
在传给 gawk 的一段输入数据中,默认以每一行作为一个输入行传递给 gawk;如果我们设置了 RS,我们可以以多行作为一个输入行传递给 gawk
我们为
test.txt
增加一份数据:现在,我们想要知道文件中所有人的名字:
我们设置了
RS=""
,以空白行作为输入行分隔符,因此 txt 文件中的两个人的所有属性分别会作为一个输入行传递给了 gawkOFS 与 ORS
我们以 test.txt 内容以下为例:
目标:把
:
换成-
解释:以
:
作为字段分隔符,\n
换行符作为输出行分隔符,-
作为输出字段分隔符。数据变量
自定义变量
数组
下列以数组的定义、遍历、删除来对数据进行说明
定义数组
遍历数组
删除元素