这让我疯了。我想要做的就是从awk向终端传递命令,其中命令是由其他变量连接在一起的字符串。
awk的文档说明了
之类的内容"echo" $1 | getline var
应该将$ 1的值放入var。但这种情况并非如此。我在这里错过了什么?
我应该补充说我实际上有一个循环
for ( i = 1; i <=NF ; i=i+1 )
{
"echo" $i | getline var
printf var " "
}
printf "\n"
用于输入文件,如
0 2
1 2
输出
0 0
0 0
到底是怎么回事。
答案 0 :(得分:8)
嗯,事实证明它不是一个错误。
正在进行的是getline打开一个新文件,根据您的系统设置,每个程序只能打开X文件。一旦你最大限度地打开文件,getline就无法打开任何新的fd。解决方案是你必须致电
for ( i = 1; i <=NF ; i=i+1 )
{
command="echo" $i
command | getline var
close(command)
printf var " "
}
printf "\n"
当然这是一个微妙的观点,文档中应该有巨大的警告标志!无论如何,我很高兴我解决了它。
答案 1 :(得分:2)
我发现你的样本存在两个问题。你的“回声”应该是“回声”(至少,对我来说“回声”不起作用),而你的printf缺少格式arg。
for ( i = 1; i <=NF ; i=i+1 ) {
"echo " $i | getline var;
printf "%s ", var ;
}
答案 2 :(得分:0)
如果要连接值
var=$(awk 'BEGIN{cmd="command "}
{
for (i=1;i<=NF;i++){
cmd = cmd" "$i
}
}
END {
# pass to shell
print cmd
}' file)
$var