原帖及讨论:http://bbs.bccn.net/thread-213521-1-1.html 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语言 |