Linux Shell 编程之gawk详解(2)

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/passwd
roots 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 | 33

ENVIRON 也是比较有意思的内建变量用法:

[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}' d
hello 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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6b6bc32df5129eccad626573bf4af975.html