Linux

無法對文件值進行 awk 循環

  • March 31, 2022

嗨,大家好

我正在嘗試循環作為參數傳遞給腳本的文件(或多個文件)的值,./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以便它下載列出的文件。有關如何使其工作的任何建議?

提前致謝,祝您天天快樂!

除了您的循環結構似乎搞砸了(每個文件只讀取一urlfilename)之外,未引用的命令替換$(awk -F',' '{print $1, $2}' $archivo)將在 default 上進行分詞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

引用自:https://unix.stackexchange.com/questions/697513