如何将AWK中的getline与连接在一起的命令一起使用

如何将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 见鬼。我发现你的样品

这快把我逼疯了。我要做的就是从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”应该是“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