在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
网友评论