1

我需要在k 脚本中获取wget调用的输出。aw但是,由于某种原因,wget当我使用双向 I/O时调用失败。

我的尝试是(以 MWE 形式):

使用循环捕获多行:

echo http://www.del-rio.net/images/festival/medium/2000_0516_Ellen_Burstyn_1274-1-4.jpg | awk '{
  cmd = "wget -t 1 $0";
  while ( (cmd | getline line) > 0 ){
    result = result " " line;
  }     
  print result;
  close (cmd);
 }'

并使用单行。这个我尝试过使用和不使用非详细选项,因为带有-nv选项的 wget 调用仅返回一行。

 echo http://www.del-rio.net/images/festival/medium/2000_0516_Ellen_Burstyn_1274-1-4.jpg | gawk '{
  "wget -t 1 -nv $0" | getline line;   
  print line;
}'

但是,在这两种情况下,它都会停止并给出消息:

--22:09:09--  http://sh/
          => `index.html' 
Resolving sh... failed: Host not found.

难道我做错了什么?还是wget在这种管道模式下不起作用?在那种情况下,如何在awk脚本内的变量中获取调用结果。

4

2 回答 2

1

将 $0 移到引号之外,即这样做:

"wget... " $0

而不是这个:

"wget... $0"

不相关但:摆脱所有那些使您的脚本混乱的空语句(尾随分号)。

于 2012-11-22T15:30:16.563 回答
0

主要问题是wget输出被重定向到标准输出而不是标准输出。因此,getline将永远不会捕获它(据我所知)。

所以我的解决方案是将日志输出重定向到标准输出,然后处理该行。

正如Ed Morton所指出的,主机未解决的问题是$0引号内的变量。

因此,将所有内容放在一起它就像这样

echo http://www.absolutely.net/wenn/handy_manny_05_wenn5360250.jpg  | awk '{
  cmd = "wget -t 1 " $0 " 2>&1"
  while ( (cmd | getline line) > 0 ){
    result = result " " line
  }
  close(cmd)
  print "the result: " result
}'
于 2012-11-23T02:22:31.383 回答