无法使 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
...

目标是,每当使用一个或多个参数调用脚本时,awk都应该解析(并传递)每个文件中包含的 url 和文件名,以便curl下载列出的文件。关于如何使其发挥作用有什么建议吗?

提前致谢,祝您有愉快的一天!

答案1

除了循环结构似乎搞砸了(每个文件只读取一对url- filename)之外,未加引号的命令替换$(awk -F',' '{print $1, $2}' $archivo)将在默认情况下进行分词IFS,结果是 awk 输出为将连接到一行上。比较:

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

相对

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

然而,这确实是 awk 的无用用途 - 您可以将 shell 设置IFS,并直接读取文件。也许你想要的是:

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

相关内容