如何在Bash中将CSV文件列内容传递给命令参数?
处理CSV生成多参数命令调用的方法
方法一:用awk和bash直接拼接命令
适合快速在终端执行,分两种场景:
场景1:文件名无特殊字符(无空格、引号)
# 提取CSV两列内容,转为空格分隔的字符串 txt_files=$(awk -F ',' '{print $1}' your_file.csv | tr '\n' ' ') tsv_files=$(awk -F ',' '{print $2}' your_file.csv | tr '\n' ' ') # 调用目标脚本 myscript.py --txt $txt_files --tsv $tsv_files
场景2:文件名含空格/特殊字符(bash 4.0+)
用数组存储文件名,避免字符串拼接出错:
# 把两列内容分别读入数组 readarray -t txt_arr < <(awk -F ',' '{print $1}' your_file.csv) readarray -t tsv_arr < <(awk -F ',' '{print $2}' your_file.csv) # 调用脚本,数组展开保留文件名格式 myscript.py --txt "${txt_arr[@]}" --tsv "${tsv_arr[@]}"
方法二:用Python脚本生成并执行命令
适合需要处理复杂CSV格式(比如文件名含逗号)的场景,逻辑更稳妥:
import csv import subprocess txt_files = [] tsv_files = [] # 读取CSV文件,提取两列 with open('your_file.csv', 'r', newline='') as f: reader = csv.reader(f) for row in reader: # 跳过空行 if not row: continue txt_files.append(row[0]) tsv_files.append(row[1]) # 构造命令并执行 cmd = ['myscript.py', '--txt'] + txt_files + ['--tsv'] + tsv_files subprocess.run(cmd, check=True)
注意事项
- 替换
your_file.csv为你的实际CSV文件名,myscript.py替换为目标脚本名 - 如果CSV存在空行,awk命令可加
NF>0过滤:awk -F ',' 'NF>0 {print $1}' your_file.csv
内容的提问来源于stack exchange,提问作者Gabriel G.
相关产品推荐
相关产品推荐

