awkでシェルコマンドを実行し、他のシェルコマンドにリダイレクトする方法は?

awkでシェルコマンドを実行し、他のシェルコマンドにリダイレクトする方法は?

カールを使用してダウンロードしたファイルから特定の文字列を取得し、ダウンロードしたファイルの内容を別のシェルプログラムにリダイレクトしたいと思います。コードは次のとおりです。

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カールを使用してダウンロードし、コンテンツをインポートしてから渡し、hexdump最終head出力を印刷したいと思いますhead

答え1

curl内部的に背中を実行しようとしないで、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

または、ペアへのすべてのヘルパー呼び出しを望み、hexdumpそれに対処するには、次のようにします。headcurl

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、コマンドライン引数のみを使用して実行し、結果の出力を渡すcurl小さなシェルスクリプトを実行するために使用します。 hexdumphead

関連情報