用 csv 中的值替换循环中的参数

用 csv 中的值替换循环中的参数

我正在尝试编写一个 bash for 循环来多次执行 python 脚本,就像这样

for i from 1 to 10 do 
    arg1 = 'path/to/directory1'
    arg2 = 'path/to/directory2'
    script.py arg1 arg2 arg3 arg4 
    done

arg1并且arg2很容易,因为它们是随着时间的推移保持一致的静态路径。但是,arg3arg4是我从我拥有的 csv 中获得的值,我希望 arg3 和 arg4 在每次迭代时根据它们所在的行进行更改。

所以对于像这样的csv

400 Steve
401 Jack
402 John
403 Jim
404 Jane
405 Joe 
406 Bob
407 Richard
408 Eric 
409 Tim
410 Marie

所以循环的第一次迭代会是这样的

script.py path/to/directory1 path/to/directory2 400 Steve

答案1

要读取并处理 CSV 文件中的所有行,您可以使用while循环:

arg1='path/to/directory1'
arg2='path/to/directory2'

while IFS=, read -r arg3 arg4; do
    script.py "$arg1" "$arg2" "$arg3" "$arg4" 
done < file.csv

答案2

(echo "column1,column2"; cat file.csv) | 
csv-exec -- script.py path/to/directory1 path/to/directory2 %column1 %column2

csv-exec 来自https://github.com/mslusarz/csv-nix-tools

相关内容