You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何遍历TSV表格并传递多参数给自定义脚本

实现方案

最稳妥的方案是直接逐行读取TSV内容,跳过表头后直接取每行列值执行脚本,代码如下:

tail -n +2 file.tsv | while IFS=$'\t' read -r col1 col2; do
    ./script1 "$col1" "$col2"
    ./script2 "$col1" "$col2"
done

各部分逻辑说明:

  • tail -n +2 file.tsv:跳过文件第一行的表头,仅输出从第二行开始的有效数据
  • IFS=$'\t':将Bash的内置字段分隔符设置为制表符,匹配TSV的分隔规则,避免列内容中包含空格时被误拆分
  • read -r col1 col2:将每行的第一列内容赋值给变量col1、第二列内容赋值给变量col2,-r参数避免内容中的反斜杠被自动转义
  • 调用脚本时变量外层加双引号,保证带特殊字符的参数可以被脚本正确接收
原写法的问题

你原本将两列分别提取存储的方案容易出现参数错位问题:如果某行存在空列、或者列值包含特殊字符,两个独立提取的列表就无法保证位置对应,不推荐使用。如果确实需要先把内容存到数组,可以用如下写法:

# 声明两个索引数组
declare -a col1_arr col2_arr
# 逐行读取填充数组
while IFS=$'\t' read -r c1 c2; do
    col1_arr+=("$c1")
    col2_arr+=("$c2")
done < <(tail -n +2 file.tsv)

# 遍历数组执行脚本
for i in "${!col1_arr[@]}"; do
    ./script1 "${col1_arr[$i]}" "${col2_arr[$i]}"
    ./script2 "${col1_arr[$i]}" "${col2_arr[$i]}"
done

内容的提问来源于stack exchange,提问作者Giulio Centorame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:27:03