awk

awk是Unix环境下一种非常好的语言,适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计。



所有的编程书籍都是通过一个“Hello world!”简单程序入门,作为借鉴,本文也采用此方法带大家入门。现在,在当前目录下建立一个文本文件hello.txt,内容如下:
Hello world!
在命令行中输入以下命令:
$ awk '{ print }' hello.txt
执行后hello.txt文件的内容显示在屏幕上。编写并且执行awk程序的方法很简单,如上所示,花括号内的是程序代码,后面的hello.txt为指定的输入文件。awk是一种行处理程序,执行awk时,它依次对输入文件中的每一行执行花括号中的代码,如上面的例子,就是对hello.txt中的每一行执行print命令。所有输出都发送到stdout,最后在屏幕上显示的结果为“Hello world!”。
上面的例子是将脚本作为命令行自变量传递给awk,我们也可以把脚本写入一个外部文件,然后通过-f选项向awk传递这个脚本文件。例如编写脚本文件hello.awk如下:
{ print }
然后通过如下方式执行:
$ awk -f hello.awk hello.txt





# 显示第xx行的第yy列的一个字符
sed -n 'xx,xxp' file | awk '{print substr($0,yy,1);}'
# 修改第xx行的第yy列的一个字符Chr,并保存为新文件
awk -F "" 'BEGIN { OFS="" }{if(NR == xx) for(i=yy;i<=yy;i++) {$i="Chr";} print }' file > newfile

file内容:
123abc456aababc789abcqweabcrtyabc
替换第9个字符到第19个字符之间的abc为xyz:
awk -F "" 'BEGIN { OFS="" } {for(i=9;i<=19;i++) if($i=="a" && $(i+1)=="b" && $(i+2)=="c"){$i="x";$(i+1)="y";$(i+2)="z"}print }' file



awk 提供了完整的比较运算符集合,包括"=="、"<"、">"、"<="、">="和"!="。另外,awk还提供了"~"和"!~" 运算符,它们分别表示“匹配”和“不匹配”。它们的用法是在运算符左边指定变量,在右边指定正则表达式。例如:
awk还允许使用布尔运算符"||"(逻辑或)和"&&"(逻辑与),以便创建更复杂的布尔表达式

awk变量“字符串化”是指所有awk变量在内部都是按字符串形式存储的。而且只要变量包含有效数字字符串,就可以对它执行数学操作,awk会自动处理字符串到数字的转换步骤。请看以下这个示例:
BEGIN   { x="0" }
/^$/    { x=x+1 }
END     { print "I found " x " blank lines. :)" }
这个例子的功能是计算文件中空白行的数量,^$表示空行。
如果做一个小实验,就可以发现如果某个特定变量不包含有效数字,awk在对数学表达式求值时会将该变量当作数字0处理。

nmap-7.01$ ./configurate
nmap-7.01$ make
nmap-7.01$ make install
nmap-7.01$ nmap 127.0.0.1

posted @ 2016-02-22 10:03  牧 天  阅读(210)  评论(0)    收藏  举报