gawk grep管道重定向到输出文件不起作用

时间:2018-02-21 13:36:29

标签: grep gawk

我有file.txt

a b c
a f g
e h j

我写了一个awk脚本

BEGIN {...}
{...}
END {
    a = "a"
    b = "b"
    system("grep " a " file.txt | grep " b " > t")
}

我希望它能在文件a b c中打印t。在Windows 7上从ConEmu运行相同的脚本将生成一个空的t文件。另一方面,执行grep a file.txt | grep b > t将产生预期结果。

为什么我这样做:我正在使用多个字段分隔符(或嵌套字段,如果您愿意)解析复杂文件中的模糊数据。拥有输入文件的结构(不是file.txt)之后,由于每一行都是一个将被执行的命令,并且它们的顺序对我来说很重要,我想知道是否有东西被设置为其他东西,如果这是使用awk在输入文件中引入新命令的条件。条件文件数据库为file.txt

为什么?难道我做错了什么?我有点失明吗?在Windows 7上,gawk 4.2.0,(GNU)grep 2.4.2

我也找不到可能有用的类似问题:如果您知道,请将此标记为重复。

1 个答案:

答案 0 :(得分:0)

由于我的目标是从awk脚本实现grep输出到文件的重定向,并且由于system()方式不起作用,我今天早上发现:

BEGIN {...}
{...}
END {
    a = "a"
    b = "b"
    ask = "grep " a " file.txt | grep " b
    while (ask | getline _foo) {
        print _foo > "dump.txt"
    }
    close(ask)
}

工作得很好。作为奖励,我可以对grep返回的每一行执行操作。同样,这在Windows 7中使用gawk 4.2.0和ConEmu。