我有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
我也找不到可能有用的类似问题:如果您知道,请将此标记为重复。
答案 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。