如何将AWK中的getline与连接在一起的命令一起使用
这快把我逼疯了。我要做的就是从awk向终端传递一个命令,该命令是由其他变量连接在一起的字符串 awk的文档中说如何将AWK中的getline与连接在一起的命令一起使用,awk,getline,Awk,Getline,这快把我逼疯了。我要做的就是从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 0 0 0 见鬼。我发现你的样品
"echo" $1 | getline var
应该将$1的值放入var,但事实并非如此。我错过了什么
我应该补充一点,我实际上有一个循环
for ( i = 1; i <=NF ; i=i+1 )
{
"echo" $i | getline var
printf var " "
}
printf "\n"
输出
0 0
0 0
见鬼。我发现你的样品有两个问题。您的“echo”应该是“echo”(至少对我来说,“echo”不起作用),并且您的printf缺少格式arg
for ( i = 1; i <=NF ; i=i+1 ) {
"echo " $i | getline var;
printf "%s ", var ;
}
for(i=1;i好吧,事实证明它不是一个bug
问题是getline会打开一个新文件,根据您的系统设置,每个程序只能打开X个文件。一旦您将打开的文件最大化,getline将无法打开任何新的fd。解决方案是您必须调用
for ( i = 1; i <=NF ; i=i+1 )
{
command="echo" $i
command | getline var
close(command)
printf var " "
}
printf "\n"
for(i=1;i如果要串联值
var=$(awk 'BEGIN{cmd="command "}
{
for (i=1;i<=NF;i++){
cmd = cmd" "$i
}
}
END {
# pass to shell
print cmd
}' file)
$var
var=$(awk'BEGIN{cmd=“command”}
{
对于(i=1;这似乎不是问题所在,对我来说这似乎是awk中的一个真正的bug,如果我使用您的代码,我也会得到扭曲的输出
var=$(awk 'BEGIN{cmd="command "}
{
for (i=1;i<=NF;i++){
cmd = cmd" "$i
}
}
END {
# pass to shell
print cmd
}' file)
$var