1 , 2, 3 , n 是标识被-F 指定的字段分隔符分割的字段值。
$1 就是输入文件中的第一栏
gawk 的重头戏 - “命令”武器库编程思路大家都没大问题,针对 gawk 首先要了解的是他的武器库,到底藏了哪些宝贝
AK-47,可靠精良,擅长短距离横扫;M16,轻便成熟,火力猛;
沙漠之鹰,更符合随身细带的要求。
因此依据作战规模,我们需要选好手上的武器:
循环
条件
变量
操作函数
变量变量又可分为“内建变量”和“自定义变量”
内建变量
举个例子来说明:
[root @centos 00 _data]# gawk -F: '{ $6 = $1 ":" $6 ; print $1 "' 's home director is " $6 } ' /etc/passwdroots home director is root:/root
bins home director is bin:/bin
daemons home director is daemon:/sbin
这里的 6 就 是 内 建 变 量 , 看 得 出 来 , 字 段 索 引 内 建 变 量 需 要 用 来标记。而 6 的 6 就 是 指 文 本 文 件 中 的 第 6 列 , 以 此 类 推 , 7 就是第 7 列,且取出来之后,可以对 6 , 7 做变更。
那么问题就来了:
是否能将内建变量取出来的值,做修改,再传回源文件做保存呢?
除了 $n ( n 指代 1,2,3,4,5,6…等自然数)之外,还有一些内建变量:
FS: 输入字段分隔符
RS: 输入数据行分隔符
OFS: 输出字段分隔符
ORS: 输出数据行分隔符
[root@centos00 _data] # echo '32:31:33'|gawk 'BEGIN {FS= ":" ;OFS= "|" } {print $1,$2,$3}' 32 | 31 | 33ENVIRON 也是比较有意思的内建变量用法:
[root@centos00 _data] # gawk 'BEGIN{ print ENVIRON["PATH"] }' /root/perl5/bin:/usr/lib64/qt-3.3/bin:/home/huangyun/perl5/bin:/usr/ local /bin:更多 gawk 内建的变量,参考文档:
ftp: //ftp.gnu.org/old-gnu/Manuals/gawk-3.0.3/html_chapter/gawk_11.html https: //www.gnu.org/software/gawk/manual/gawk.html#SEC_Contents
自定义变量
无法想象只有内建变量的编程世界会是怎么样,大概会像少了插件那样去用 visual studio code 吧,很无助。所以自定义变量是肯定会支持的
[root@centos00 _data] # gawk '{Greetings="hello world";print Greetings}' dhello world
^C
[root@centos00 _data] # gawk 'BEGIN{Greetings="hello world";print Greetings}' hello world
[root@centos00 _data] #
Greetings 是自定义的变量,第一个例子很有趣,没有BEGIN 指令,gawk 始终是在等待输入。
自定义变量之数组
数组在 gawk 中的使用,更像是 K-V 对:
[root@centos00 _data] # gawk 'BEGIN{ Prize[ "One" ]= "house" Prize[ "Two" ]= "iphoneX" for ( prize in Prize){
print Prize[prize]
}
} '
iphoneX
house