聘我网

新概念招聘3.0

awk问题

vote up0vote downstar

这里看到这样一段程序:

#include <stdio.h>

int main() {
    puts(
#include "/dev/stdin"
    );
    return 0;
}

编译方法:

@awk '/@/{print "  \"" $$_ "\\n\"" }' ../AUTHORS | \
            gcc -o list_authors list_authors.c  

如何理解那段awk脚本?

我知道awk的使用方法是:

awk 'pattern {action}' file

但是这里的@,$$_又该如何理解?

 

1 个答复

vote up0vote downcheck

/@/是匹配所有含有@符号的行。

要注意那段脚本是在Makefile中,在Makefile$是个特殊符号所以必须用$$来进行转义。

所以$$_相当于$_,这里_是个变量(man awk后搜索variable),而且是未初始化的变量,值为0,所以$$_ = $_ = $0

$0即匹配整行。

所以对匹配行产生的动作是:

打印(print)这三部分组成的字符串:

"  \""
$0
"\\n\""  

假如匹配行$0gossip@example.com,那输出将是:

  "gossip@example.com"

Over!

链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.