次の4つのフィールド(id1、id2、id3、ファイル名)を持つCSVがあります。
2,2314,78,/image/1289.jpg
1,19825,179,/image/01288.jpg
2,2585,2281,/image/01287.jpg
3,35879,82,/image/01286.jpg
イメージには共通 URL エンドポイントがあります。
http://example.com/assets/?mediafile=
最後の列は画像URLの唯一の部分です。
各画像をダウンロードしようとしています。各画像の名前は最初の3つのフィールドに基づいています。
id1は常に1桁です。
id2は実際には0が付いている5桁です(したがって、2314は02314でなければなりません)。
id3は実際には4桁です(78は0078になります)。
だから合計10桁のコードがあります。したがって、最初の画像名は2023140078.jpgでなければなりません。
単一のファイルを手動でダウンロードするには、次の手順を実行します。
wget -O 2023140078.jpg http://example.com/assets/?mediafile=/image/1289.jpg
また、ある種の状態やエラーコードをその行またはエラーログに書き換えることができれば良いでしょう。
答え1
awk -F, '{printf("%d%.5d%.4d %s\n",$1,$2,$3,$4)}' input.csv | while read newfile filename
do
wget -O "${newfile}.jpg" http://example.com/assets/?mediafile=${filename}
done
答え2
コンマに設定しIFS
、ループを使用してwhile
ファイルを入力として使用して4つの変数を読み取ることができます。
IFS=','
while read c1 c2 c3 c4; do
wget -O "$(printf "%d%05d%04d.jpg" "$c1" "$c2" "$c3")" "http://example.com/assets/?mediafile=${c4}"
done < file.txt