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

如何删除CSV文件中第4列非指定值的行(避免误删)?

如何精准筛选CSV文件中第4列符合特定值的行?

我来帮你解决这个精准筛选的问题——之前的sed命令之所以会误删,是因为它匹配的是整个行里的关键词,而不是只检查第4列。要实现只保留第4列符合特定值的行,用awk是最直接高效的方案,当然也可以改进sed的写法。

最优方案:使用awk精准匹配第4列

awk天生就是用来处理结构化文本(比如按列分隔的CSV/TSV)的工具,能直接定位到第4列进行判断:

awk '$4 ~ /^(exonic|exonic;splicing|splicing)$/' input.csv > output.csv

命令解释:

  • $4:表示取当前行的第4个字段(awk默认以空白字符作为分隔符,正好适合你示例里的空格分隔格式)
  • ~ /正则表达式/:表示判断第4列是否匹配给定的正则
  • ^(exonic|exonic;splicing|splicing)$:正则的意思是完全匹配三个值中的一个:
    • ^ 和 $ 确保是整列匹配,不会出现部分匹配的情况(比如不会把exonic_xxx当成符合条件的)
    • | 表示逻辑“或”,分隔三个目标值

运行这个命令后,就会只保留第4列是exonic、exonic;splicing或splicing的行,完全不会误删其他列包含关键词的行。

备选方案:改进sed命令实现精准匹配

如果你更习惯用sed,也可以通过正则定位第4列的位置来实现:

sed -n '/^[^ ]\+ [^ ]\+ [^ ]\+ \(exonic\|exonic;splicing\|splicing\)$/p' input.csv > output.csv

命令解释:

  • -n 和 /p:配合使用,只输出匹配正则的行
  • ^[^ ]\+ [^ ]\+ [^ ]\+:匹配前三个字段(每个字段是不含空格的内容,后跟空格)
  • \(exonic\|exonic;splicing\|splicing\)$:匹配第4列的目标值,$确保到行尾,也就是第4列之后没有其他内容(如果你的行只有4列的话)

不过这个写法比awk繁琐,而且如果字段里有空格(虽然你示例里没有)就会失效,所以更推荐awk方案。

验证示例

用你提供的输入数据测试awk命令,输出结果正好是你想要的目标内容:

chr1 26162313 26162313 exonic
chr1 26349533 26349535 exonic
chr1 26487940 26487940 exonic
chr1 26162353 26162313 splicing
chr1 26349533 26349535 exonic;splicing
chr1 26357656 26357656 exonic

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:37:12