シーケンス番号と画像URLを含むいくつかの列を持つcsvファイルがあります。ファイルは450行以上です。
1,text1,text2,http://image_a.jpg
2,text1,text2,http://image_b.jpg
3,text1,text2,http://image_c.jpg
.
.
.
目標は、シーケンスであるファイル名を使用してURLで画像をダウンロードすることです。次のスクリプトでこれを成功させました
while IFS=, read col1 col2 col3 col4
do
curl ${col4} > ${col1}.jpg
done < myfile.csv
次に、xargs -P
を使用してcurlコマンドを並行して実行したいと思います。 (プロセス数を制限したいので、&
を使用してバックグラウンドで処理したくありません。)-I
と-R
を使用した例はありますが、複数のフィールドの使用方法を理解できませんxargsコマンドのcsvファイルの行から。
私はgnu parallelとwgetがより良いオプションであるかもしれないと理解していますが、私のUNIX環境では利用できません。
ありがとう。
curl
コマンドを作成してxargsに渡す必要があるように思えます。
awk -F, '{print "curl '\''" $4 "'\'' > '\''" $1".jpg'\''"}' < input.csv | xargs -P2 -I {} sh -c '{}'
シェルの特殊文字が含まれている場合に備えて、URLとシーケンス番号/ファイル名を単一引用符で囲んでいるため、コマンドは少し見苦しく見えます(例:&
)。
スコットが提案された方法の1つを使用してGNU Parallel https://oletange.wordpress.com/2018/03/28/excuses-for-not-installing- gnu-parallel / これでうまくいくかもしれません:
parallel --colsep , 'curl {4} > {1}.jpg' :::: input.csv