如何通过模式匹配提取文本文件前6列及第7列中的AC字段值
提取固定列与指定键值对字段的解决方案
你之前尝试的方法因为第7列里AC=的位置不固定(第一条在最前面,第二条在中间),拆分字段后没法稳定拿到AC的值。其实用单条awk命令就能一次性搞定,不需要生成中间文件,更高效:
awk '{match($7, /AC=[^;]+/); print $1, $2, $3, $4, $5, $6, substr($7, RSTART, RLENGTH)}' file1
命令解释:
match($7, /AC=[^;]+/):在第7列(分号分隔的键值对列)中,匹配以AC=开头、直到遇到分号为止的字符串。awk的match函数会自动设置RSTART(匹配起始位置)和RLENGTH(匹配长度)两个变量。substr($7, RSTART, RLENGTH):从第7列中截取刚才匹配到的AC=xxx部分。- 最后把前6列和截取到的AC字段一起打印,就能得到你想要的结果。
验证结果:
输入文件file1内容:
1 123 ab456 A G PASS AC=0.15;FB=1.5;BV=45; 0|0 0|0 0|1 0|0
4 789 ab123 C T PASS FB=90;AC=2.15;BV=12; 0|1 0|1 0|0
执行命令后输出:
1 123 ab456 A G PASS AC=0.15
4 789 ab123 C T PASS AC=2.15
完全符合你的期望!
内容的提问来源于stack exchange,提问作者rij
相关产品推荐
相关产品推荐

