如何用awk提取file.txt中最后一列含gene_type=transcribed_unprocessed的行?
问题解决:提取file.txt中第9列包含指定字符串的行
原命令失败原因
- 第一个命令误用了Shell的
[[ ]]语法:awk有独立的条件判断逻辑,不支持bash的[[ ]]语法,导致命令无法正确执行。 - 第二个命令错误指定分隔符:原文件的列分隔符是空白(制表符/空格),但你用
-F,将逗号设为分隔符,整行被识别为第1列,$9不存在,自然无匹配结果。
正确命令
方法1:正则匹配(推荐)
awk '$9 ~ /gene_type=transcribed_unprocessed/' file.txt > output.txt
awk默认以空白作为列分隔符,$9对应第9列,~ /pattern/用于判断列内容是否匹配目标正则,这里直接匹配指定字符串即可。
方法2:用index函数判断子串存在
awk 'index($9, "gene_type=transcribed_unprocessed") > 0' file.txt > output.txt
index($9, "目标字符串")返回目标字符串在$9中的起始位置,返回值大于0即表示该子串存在。
执行上述任意命令后,output.txt会包含你需要的第1、3、4、6行。
内容的提问来源于stack exchange,提问作者beepboopbeep
相关产品推荐
相关产品推荐

