假设我有以下 CSV 文件 (sample.csv)
filepath1
filepath1,filepath2
filepath1,filepath2,filepath3
filepath1,filepath2,filepath3,filepath4
filepath1,filepath2
我需要使用的程序使用以下语法:
program_im_using --file filepath1
但如果存在多个文件,输入的语法为:
program_im_using --file filepath1 --file filepath2
or
program_im_using --file filepath1 --file filepath2 --file filepath3
我要粘贴 CSV 文件中的值,如下所示:
filepath_first=( $(awk -F "\"*,\"*" '{print $1}' $sample_csv) )
filepath_second=( $(awk -F "\"*,\"*" '{print $2}' $sample_csv) )
for i in "${!filenames[@]}"; do
program_im_using --file "${filepath_first[i]}" --file "${filepath_second[i]}"
done
我所举的例子只有在每行恰好有 2 列值时才有效。我该如何概括,以便如果我有一列,我会得到:
program_im_using --file filepath1
但如果我有两个
program_im_using --file filepath1 --file filepath2
ETC?
对于可变数量的参数,一种常见的方法是将参数存储在数组中,例如:
列出输入参数的示例脚本:
然后我们可以将这些参数提供给程序,如下所示:
示例输入文件:
用于
sed
重新格式化我们的 csv 行:将
sed
结果输入bash/while-read
循环:笔记:
bash
这将生成:
使用
GNU awk
:产量:
然后,您可以
awk
通过管道bash
执行:解析
CSV
如下awk
:https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
更高级:https://www.gnu.org/software/gawk/manual/gawk.html#More-CSV
您可以使用
xargs
: