awk的一些疑问和验证(GNU gawk)

gawk和awk的关系,实际上都是gawk,后者只是一个前者的符号链接

 

-v参数是怎么用的

1、 没有这个参数是不可以在命令行下面初始化变量的,eg:

awk -f prob month=10 year=10 facts         #得不到任何结果

2、 如果放在文件名的后面也是不行的,eg:

awk -f prob facts -v month=10 -v year=10     #得不到任何结果

3、 每一个变量名前面都需要有-v前导,否则该变量名仍旧没有被初始化,eg:

awk -f prob -v month=10 year=10 facts        #year没有被初始化

4、 给出一个正确的例子,eg:

awk -f prob -v month=10 -v year=10 facts    #month和year变量都被初始化了

 

范围模式可以使用表达式么:可以,eg:

awk '$0 == 3, $0 == 4' testfile    #发现3,然后打印到发现4为止

 

==到底匹配了字符串还是模式:字符串,eg:

xxx@xxx:~/testdir/awk> cat testfile

123456abc

xxx@ xxx:~/testdir/awk> awk '$0 == "abc"' testfile

xxx @ xxx:~/testdir/awk> awk '$0 ~ "abc"' testfile

123456abc

 

awk '{ "cat testfile" | getline d; print d}' testfile的解释,实际上是为了解释这个管道"|"

首先执行cat命令,将文件全部给了一个匿名管道,然后每处理一个testfile的记录都从这个管道里面读取一行,然后输出。并不是每次都会将cat命令执行一次,都输出第一行。

 

同理,重定向(>)也是整个awk仅执行一次(不是每一个记录执行一次),因此以下命令行:

awk '{ "cat testfile" | getline d; print d > "testfile2"}' testfile

完成的功能是将testfile拷贝到2,附加重定向(>>)同理。

posted on 2011-11-08 01:42  Observer  阅读(1041)  评论(0编辑  收藏  举报

导航