gawk编辑器
1.准备文件-bash-3.2$ cat Linux
1 Fedora Redhat 100
2 Ubuntu Ubuntu 300
3 Redhat Redhat 400
4 Unix Unix 500
5 CentOS Redhat 200
2.格式以及命令详解
-bash-3.2$ gawk '{print}' Linux
1 Fedora Redhat 100
2 Ubuntu Ubuntu 300
3 Redhat Redhat 400
4 Unix Unix 500
5 CentOS Redhat 200
#print打印所有行,注意格式,以及TAB键
-bash-3.2$ gawk '/CentOS/' Linux
5 CentOS Redhat 200
#打印含有CentOS字符串的行
-bash-3.2$ gawk '{print $2,"$"$4}' Linux
Fedora $100
Ubuntu $300
Redhat $400
Unix $500
CentOS $200
#打印每行的第2个字段+字符$+第4个字段
-bash-3.2$ gawk '/Redhat/{print $2}' Linux
Fedora
Redhat
CentOS
#打印含有Redhat字符串的行的第2个字段
-bash-3.2$ gawk '$2~/Ubuntu/' Linux
2 Ubuntu Ubuntu 300
#打印第2个字段匹配Ubuntu字符串的行,正则表达式的应用
-bash-3.2$ gawk '$2!~/Ubuntu/' Linux
1 Fedora Redhat 100
3 Redhat Redhat 400
4 Unix Unix 500
5 CentOS Redhat 200
#打印第2个字段不为Ubuntu的行
-bash-3.2$ gawk '$2~/^[FC]/ {print $2}' Linux
Fedora
CentOS
#打印开头以F或C的行的第2个字段
-bash-3.2$ gawk '$4==400' Linux
3 Redhat Redhat 400
#打印第4个字段等于400的行,操作符(==,>=等等)同C语言
-bash-3.2$ gawk '/Ubuntu/,/Redhat/' Linux
2 Ubuntu Ubuntu 300
3 Redhat Redhat 400
#打印含Ubuntu的行到含Redhat的行
-bash-3.2$ gawk '{print length,$0}' Linux
19 1 Fedora Redhat 100
19 2 Ubuntu Ubuntu 300
19 3 Redhat Redhat 400
15 4 Unix Unix 500
19 5 CentOS Redhat 200
#内置函数length,表示每行字符个数,$0代表整行(内置函数自己查阅有关书籍即可)
-bash-3.2$ gawk 'NR==3,NR==5' Linux
3 Redhat Redhat 400
4 Unix Unix 500
5 CentOS Redhat 200
#NR表示行号,打印行号为3的行到行号为5的行
-bash-3.2$ cat cmd
#! /bin/gawk -f
BEGIN{
print"Number Type Co. Price"
print"------------------------------"
}
{print}
/Redhat/ {print>"Redhat"}
/Ubuntu/ {print>"Ubuntu"}
END{ print "Done!"}
-bash-3.2$ gawk -f cmd Linux
Number Type Co. Price
------------------------------
1 Fedora Redhat 100
2 Ubuntu Ubuntu 300
3 Redhat Redhat 400
4 Unix Unix 500
5 CentOS Redhat 200
Done!
-bash-3.2$ ls
cmd Linux Redhat Ubuntu
-bash-3.2$ cat Redhat
1 Fedora Redhat 100
3 Redhat Redhat 400
5 CentOS Redhat 200
#用命令文件来执行命令,在大量操作中可以方便使用,就像DOS中的批处理
#使用格式:gawk -f 命令文件 源文件
#第1行#! /bin/gawk -f表示执行该文件时使用gawk编辑器,以加快执行速度,否则通过sh来执行
#格式BEGIN{}+中间命令+END{},你可以通过执行效果来查看
#/Redhat/ {print>"Redhat"}表示将含有Redhat字符串的行写入到Redhat文件中,保存作用
-bash-3.2$ cat cmd2
#! /bin/gawk -f
BEGIN{
print"Number Type Co. Price"
print"------------------------------"
}
{
if($2~/Fedora/)$2="Fedora9"
printf "%-3s %-8s %-6s $%5.2f\n",$1,$2,$3,$4
}
END{ print "Done!"}
-bash-3.2$ gawk -f cmd2 Linux
Number Type Co. Price
------------------------------
1 Fedora9 Redhat $100.00
2 Ubuntu Ubuntu $300.00
3 Redhat Redhat $400.00
4 Unix Unix $500.00
5 CentOS Redhat $200.00
Done!
#格式输出以及表达式,都同C语言