1

У меня есть текстовый файл, который содержит 10000 URL-адресов с уникальным номером, я хочу сохранить файл как. Каждая строка имеет 10-значный код, а затем URL-адрес изображения для извлечения. Как сделать так, чтобы входной файл использовал первые 10 символов в качестве имени файла wget?

это пример входного файла: input.txt

x100083590http://image.allmusic.com/13/adg/cov200/drt200/t291/t29123q8m19.jpg
b200149548http://ecx.images-amazon.com/images/I/41DoH%2BAWKEL.jpg
z100151855http://image.allmusic.com/13/amg/cov200/dri400/i450/i45035hxdrb.jpg
p400171646http://ecx.images-amazon.com/images/I/61cH4n34IhL.jpg

wget -i input.txt получит файл, но не с предыдущим уникальным номером.

Я хочу, чтобы t29123q8m19.jpg (первая строка) был сохранен как x100083590.jpg

Если есть лучший способ записать входной файл, скажем, сначала по URL, то я тоже могу это сделать, но я никогда не узнаю длину первого поля. Прямо сейчас первые 10 символов всегда будут тем, что я хочу сохранить как изображение wget.

Редактировать Это делается в среде Windows.

3 ответа3

5

В линуксе.

 while read p; do
   newname=${p:0:10} # first 10 chars
   url=${p:10} # remaining chars after the 10th
   wget $url -O $newname.jpg  #get url and output to new filename
 done < input.txt

Под окнами мы могли бы сделать:

 SETLOCAL ENABLEDELAYEDEXPANSION
 for /f %%p in (input.txt) do (
    SET p1=$$p
    SET newname=!p1:~0,10!
    SET url=!p1:~10!
    wget %url% -O %newname%.jpg
 )
2

Используйте следующий пакетный файл:

@echo off
setlocal enabledelayedexpansion
for /f %%l in (Input.txt) do (
    set line=%%l
    wget -O !line:~0,10!.jpg !line:~10!
)
0

Использование и shell (cygwin или git-bash):

file=/PATH/TO/INPUT_FILE.txt
awk '{print "wget \047" substr($0, 11) "\047 -o " substr($0, 0, 10) ".jpg"}' "$file | sh

та же, но версия с несколькими строками:

file=/PATH/TO/INPUT_FILE.txt
awk '
    {
        print "wget \047" substr($0, 11) "\047 -o " substr($0, 0, 10) ".jpg"
    }
' "$file | sh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .