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

Unix下数据子集提取:按单列多数值条件筛选行

Unix环境下TSV文件指定列多值匹配过滤方案

以下方案均默认你需要筛选的目标列为第N列,可根据实际需求替换示例中的列号(列号从1开始计数)。

方法1:awk直接匹配(最适合20-30个固定值的场景)

直接把允许的取值存在awk的关联数组中判断,效率高且不容易出现误匹配:

# 示例为筛选第2列值为30700、10600等指定值的行,默认保留表头
awk 'BEGIN{FS=OFS="\t"; allow["30700"]=1; allow["10600"]=1; allow["其余目标值按格式新增即可"]=1} NR==1 || allow[$2]' 原始文件.tsv > 筛选结果.tsv

参数说明:

  • FS=OFS="\t":明确指定输入、输出的字段分隔符为制表符,避免列内容包含空格时出现列拆分错误
  • allow["xxx"]=1:将所有需要匹配的目标值存入关联数组,20-30个值按该格式依次添加到BEGIN块中即可
  • NR==1:保留TSV的表头行,如果你的文件没有表头可以直接删除该判断条件
  • $2:代指要匹配的第二列,可替换为实际需要筛选的列编号

方法2:取值存单独列表文件(适合取值经常变更的场景)

如果目标取值经常调整,不想每次修改命令,可以把所有允许的取值单独存为一个文本文件allow_list.txt,每行写一个目标值:

30700
10600
其他目标值...
再运行以下命令过滤即可:

awk 'BEGIN{FS=OFS="\t"} NR==FNR{allow[$1]=1; next} NR==1 || allow[$2]' allow_list.txt 原始文件.tsv > 筛选结果.tsv

方法3:grep正则匹配(仅作为备选)

该方法容易因为正则写得不准确出现误匹配,非必要不推荐:

# 示例为匹配第2列的指定值,且保留表头
grep -E $'(^表头内容\t|^[^\t]*\t(30700|10600|其余目标值用|分隔)\t)' 原始文件.tsv > 筛选结果.tsv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:24:00