CSVファイルのIDに基づいてフォルダに画像をダウンロードする

CSVファイルのIDに基づいてフォルダに画像をダウンロードする

次のcsvファイルがあります(簡単な例、実際にはIDごとに約20の画像があります)。

2463666;[email protected];yleiskuva;7;kivirealty-original;7;http://d372r717gpt3jp.cloudfront.net/itemimages/realty/original/209.15555/img483903555766418535.jpg;pääkuva;1;kivirealty-original;1;http://d372r717gpt3jp.cloudfront.net/itemimages/realty/original/209.15555/img2055776735947406126.jpg;yleiskuva;9;kivirealty-www;9;http://d372r717gpt3jp.cloudfront.net/itemimages/realty/www/209.15555/img7955434706446319955.jpg
2538034;[email protected];yleiskuva;8;kivirealty-original;8;http://d372r717gpt3jp.cloudfront.net/itemimages/realty/original/209.15555/img3622394024988955125.jpg;yleiskuva;7;kivirealty-original;7;http://d372r717gpt3jp.cloudfront.net/itemimages/realty/original/209.15555/img7456562650934206782.jpg;yleiskuva;7;kivirealty-thumb;7;http://d372r717gpt3jp.cloudfront.net/itemimages/realty/thumb/209.15555/img3483011994211655969.jpg
...

構造は次のとおりです。

ID番号、Eメール画像タイプ、画質、画像転送ID、

太いバージョンでは、ソースxmlにこれらのフィールドがある回数を繰り返すため、IDごとのイメージ数が異なる場合があります。たとえば、フォルダを作成し、IDに基づいてそのフォルダにこれらの画像をダウンロードする必要があります。

some_path/2463666/img483903555766418535.jpg

サムネイルと「wwwサイズ」のイメージファイルもありますが、kivirealty-originalイメージ位置の前のフィールドとしてイメージファイルのみが必要です。

必要なファイルを解析してから、wgetそのファイルをそのIDという名前のフォルダに解析するにはどうすればよいですか?

サンプルファイルはシェルスクリプトによって生成され、ファイルが完了した後にこれを行うにはコードが必要です。

答え1

while IFS=";" read id a remain
do
    while [ "$remain" ]
    do
        IFS=";" read a b test d i_url remain <<< "$remain"
        if [ "$test" == "kivirealty-original" ]
        then
            if [ ! -d "some_path/$id" ]
            then
                mkdir -p "some_path/$id"
            fi
            wget -nd -P "some_path/$id" "$i_url"
        fi
    done
done < file.csv

答え2

すべてが期待どおりに機能したら、awkを使用してコマンドを生成し、出力をshにパイプします。これはコードスケルトンです(必須wgetオプションを追加する必要があります)...

awk -F\; '
{
    printf "mkdir -p %s/%s\n", "somepath", $1
    for (i=7; i<=NF; i+=5) {
        printf "wget ... %s ... %s/%s ...\n", $i, "somepath", $1
    }
}
' | sh

関連情報