ファイル値を繰り返すためにawkを取得できません

ファイル値を繰り返すためにawkを取得できません

こんにちは、

スクリプトに引数として渡されたファイル(または複数のファイル)の値を繰り返し実行しようとすると、各ファイルの最初の行だけが認識されます./myscript file1 file2 ...awk

#!/bin/bash

while [[ ${#} > 0 ]]
do
 for archivo in ${@}
 do
  read url filename <<<$(awk -F',' '{print $1, $2}' $archivo)
  curl -o $filename $url
 done
done

スクリプトに引数として渡されるファイルの構造は次のとおりです。

url1,filename1
url2,filename2
...

目的は、1つ以上のパラメータを使用してスクリプトを呼び出すたびに、リストされたファイルをダウンロードawkするために各ファイルに含まれるURLとファイル名を解析(および渡す)する必要があることです。curlどのように動作させるための提案がありますか?

事前に感謝し、良い一日をお過ごしください!

答え1

url混乱しているように見えるループ構造(各ファイルから一対の - のみを読む)に加えて、filename引用符のないコマンド置換はデフォルト$(awk -F',' '{print $1, $2}' $archivo)でトークン化され、IFSawk出力は1行にリンクされます。比較する:

$ echo $(printf 'foo bar\nbaz bam\n')
foo bar baz bam

比較的

$ echo "$(printf 'foo bar\nbaz bam\n')"
foo bar
baz bam

しかし、これは実際にawkの無駄な使用です。シェルを設定してファイルを直接読み取ることができIFSます,。たぶんあなたが望むもの:

for archivo in "$@"
do
  while IFS=, read -r url filename rest
  do 
    curl -o "$filename" "$url"
  done < "$archivo"
done

関連情報