如何在 awk 中运行 shell 命令并重定向到另一个 shell 命令?

如何在 awk 中运行 shell 命令并重定向到另一个 shell 命令?

我想从使用curl下载的文件中获取特定的字符串,并将下载的文件内容重定向到另一个shell程序。这是代码:

curl "http://file-list-url" -s | awk 'BEGIN {c=0} $0 ~ "FILE:" {urlpos=index($0,"URI=")+5;  fileurl=substr($0, urlpos, 150-urlpos-2);  print fileurl ; curl -s -H  "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36"   fileurl | hexdump -C | head -1  ; print filecontent }' 

获取每个 后fileurl,我想使用 curl 下载它,获取其内容,传递到hexdumpthenhead并打印 的最终输出head

答案1

curl不要尝试在 内部运行etc. awk,而是用作awk管道中的处理步骤,然后运行管道的其他部分:

useragent='User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36

curl -s "http://file-list-url" |
awk '/FILE:/ { urlpos=index($0,"URI=")+5; print substr($0, urlpos, 150-urlpos-2) }' |
xargs -I {} curl -s -H  "$useragent" {} |
hexdump -C | head -n 1

或者,如果您希望hexdumphead作用于对 的每个辅助调用curl

curl -s "http://file-list-url" |
awk '/FILE:/ { urlpos=index($0,"URI=")+5; print substr($0, urlpos, 150-urlpos-2) }' |
xargs -I {} sh -c '
    curl -s -H  "$useragent" "$1" |
    hexdump -C | head -n 1' sh {}

在这里,我们用来xargs执行一个小型 shell 脚本,该脚本使用其唯一的命令行参数运行,并通过和curl传递结果输出​​。 hexdumphead

相关内容