Linux积累

Linux 命令 & shell 脚本之11(gawk 程序)

2020-10-25  本文已影响0人  轻飘飘D

在gawk编程语言中,你可以做下面的事情:
 定义变量来保存数据;
 使用算术和字符串操作符来处理数据;
 使用结构化编程概念(比如if-then语句和循环)来为数据处理增加处理逻辑;
 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告。

gawk程序的基本格式如下:
gawk options program file

gawk选项

选 项 描 述
-F fs 指定行中划分数据字段的字段分隔符
-f file 从指定的文件中读取程序
-v var=value 定义gawk程序中的一个变量及其默认值
-mf N 指定要处理的数据文件中的最大字段数
-mr N 指定数据文件中的最大数据行数
-W keyword 指定gawk的兼容模式或警告等级

1.使用数据字段变量

。它会自动给一行中的每个数据元素分
配一个变量。默认情况下,gawk会将如下变量分配给它在文本行中发现的数据字段:
 $0代表整个文本行;
 $1代表文本行中的第1个数据字段;
 $2代表文本行中的第2个数据字段;
 $n代表文本行中的第n个数据字段。
在文本行中,每个数据字段都是通过字段分隔符划分的。gawk在读取一行文本时,
会用预定义的字段分隔符划分每个数据字段。gawk中默认的字段分隔符是任意的空白字符(例如空格或制表符)。

[root@MYSQL8 myshell]# cat data2.txt 
One line of test text.
Two lines of test text.
Three lines of test text.

[root@MYSQL8 myshell]# gawk '{print $1}' data2.txt
One
Two
Three

[root@MYSQL8 myshell]# cat data3.txt
UserName,,Age,,Sex
xag,,42,,M
yyc,,37,,F
xrj,,12,,F
xrx,,01,,F
要读取采用了其他字段分隔符的文件,可以用-F选项指定 ($2 : 每行的第2个字段)
[root@MYSQL8 myshell]# gawk -F,, '{print $2}' data3.txt
Age
42
37
12
01

[root@MYSQL8 myshell]# gawk -F',,' '{print $2}' data3.txt
Age
42
37
12
01

2.在程序脚本中使用多个命令

[root@MYSQL8 myshell]# echo "My name is xag" | gawk '{$4="xuaiguo"; print $0}'
My name is xuaiguo
第一条命令会将 “My name is xag” 串中 字段变量$4=xag 重新赋值xuaiguo。第二条命令会打印整个数据字段。

3.从文件中读取程序

[root@MYSQL8 myshell]# cat script2.gawk
{
 text = "'s age is "
 print $1 text $2
}
注意,gawk程序在引用变量值时并未像shell脚本一样使用美元符

[root@MYSQL8 myshell]# gawk -F',,' -f script2.gawk data3.txt
UserName's age is Age
xag's age is 42
yyc's age is 37
xrj's age is 12
xrx's age is 01
BEGIN脚本创建了标题 (在处理数据前运行脚本)
END脚本生成页脚 (在处理数据后运行脚本)

[root@MYSQL8 myshell]# cat script3.gawk
BEGIN {
print "The latest list of users and shells"
print " Name \t Age"
print "----- \t ---"
FS=",,"
}
{
print $1 " \t " $2
}

END {
print "This concludes the listing"
}

[root@MYSQL8 myshell]# gawk -f script3.gawk data3.txt
The latest list of users and shells
 Name    Age
-----    ---
UserName     Age
xag      42
yyc      37
xrj      12
xrx      01
上一篇 下一篇

猜你喜欢

热点阅读