Awk 从以制表符分隔的文本文件中删除字符串中包含特定数字的行

Awk 从以制表符分隔的文本文件中删除字符串中包含特定数字的行,awk,sed,Awk,Sed,所以我有这样的数据 chr1 169845117 169845232 - ENSG00000000457.9_exNb11 chr1 169847773 169847960 - ENSG00000000457.9_exNb12 chr1 169771760 169771866 + ENSG00000000460.12_exNb4 chr1 169772308 169772450 + ENSG00000000460.12_ex

所以我有这样的数据

chr1    169845117   169845232   -   ENSG00000000457.9_exNb11
chr1    169847773   169847960   -   ENSG00000000457.9_exNb12
chr1    169771760   169771866   +   ENSG00000000460.12_exNb4
chr1    169772308   169772450   +   ENSG00000000460.12_exNb5
chr6    41046766    41046903    +   ENSG00000001167.10_exNb2
chr6    41051783    41051931    +   ENSG00000001167.10_exNb4
chr6    41057316    41057449    +   ENSG00000001167.10_exNb5
chr6    41057941    41058048    +   ENSG00000001167.10_exNb6
chr6    41059265    41059433    +   ENSG00000001167.10_exNb7
chr6    41060649    41060824    +   ENSG00000001167.10_exNb8
chr6    41062133    41062236    +   ENSG00000001167.10_exNb9
chr6    46097728    46097926    +   ENSG00000001561.6_exNb1
我想删除第5列中exNb字符串末尾有1的行,例如上面的最后一行。可能有一个awk或sed选项可以让我这样做,但由于我在这两种语言中都没有经验,我希望有人能帮助我,我不确定这有多复杂

编辑:所需的结果如下

chr1    169845117   169845232   -   ENSG00000000457.9_exNb11
chr1    169847773   169847960   -   ENSG00000000457.9_exNb12
chr1    169771760   169771866   +   ENSG00000000460.12_exNb4
chr1    169772308   169772450   +   ENSG00000000460.12_exNb5
chr6    41046766    41046903    +   ENSG00000001167.10_exNb2
chr6    41051783    41051931    +   ENSG00000001167.10_exNb4
chr6    41057316    41057449    +   ENSG00000001167.10_exNb5
chr6    41057941    41058048    +   ENSG00000001167.10_exNb6
chr6    41059265    41059433    +   ENSG00000001167.10_exNb7
chr6    41060649    41060824    +   ENSG00000001167.10_exNb8
chr6    41062133    41062236    +   ENSG00000001167.10_exNb9
如果可能有尾随空格,那么您可能希望通过使用
/1*$/
作为正则表达式来证明上述内容的可靠性。如果您的文件真的像您描述的那样简单,那么您可以使用
grep-v'1$'
(或
grep-v'1*$”
)等等


当然,如果标准基于所有尾随数字的数值,则必须进行调整。(在这种情况下,您必须考虑“01”、“1E0”、“1.0”、“0.1e1”等)。

为您编辑了这些内容。本质上唯一改变的是最后一行被删除,因为它有一个1。如果你有生物学背景,我只是想从我的分析中删除所有的第一个外显子。你所需要的是
grep-v'exNb1$”filename
来排除这些行这看起来解决了问题,非常感谢!只要我被允许,我会尽快接受这个答案。或者干脆
awk'/1$/'
。请注意,tab是默认分隔符之一。此外,我们可以简单地匹配整行,因为我们正在检查最后一列。这不也会删除以
exNb11
exNb21
等结尾的行吗?哦,是的,我明白了。但您的awk解决方案也在这样做。(我只是看了你的答案,没有看问题)。它应该是
grep-v'[^[:digit:]1$”
awk -F\\t '$5 ~ /1$/ {next} {print}'