我有一个包含 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 实际上是 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