Como wget imagens de CSV, anexar url e nomes de arquivos de campos?

1

Eu tenho um CSV com 4 campos (id1, id2, id3, filename) assim:

2,2314,78,/image/1289.jpg
1,19825,179,/image/01288.jpg
2,2585,2281,/image/01287.jpg
3,35879,82,/image/01286.jpg

Existe um endpoint de URL comum para as imagens como

http://example.com/assets/?mediafile=

A última coluna é a parte exclusiva do URL da imagem.

Estou tentando fazer o download de cada imagem e o nome de cada imagem é baseado nos três primeiros campos:

id1 é sempre 1 dígito id2 é realmente 5 dígitos com zeros prepending (assim 2314 precisa se tornar 02314)
id3 é realmente 4 dígitos (78 se torna 0078),

então, no total, um código de 10 dígitos. Portanto, o primeiro nome da imagem deve ser 2023140078.jpg

Se eu baixasse um único arquivo manualmente, faria algo assim:

wget -O 2023140078.jpg http://example.com/assets/?mediafile=/image/1289.jpg

Além disso, se eu pudesse escrever algum tipo de status ou código de erro para a linha ou escrever um log de erro, seria ótimo.

    
por zevnyc 17.01.2017 / 07:02

2 respostas

2
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
    
por 17.01.2017 / 07:27
1

Você pode definir o IFS para uma vírgula e usar um loop while para ler as 4 variáveis que usam o arquivo como entrada:

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
    
por 17.01.2017 / 07:24

Tags