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

时间:2015-12-01 20:35:33

标签: 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
chr6    46097728    46097926    +   ENSG00000001561.6_exNb1

我想删除第5列中exNb字符串末尾的行,例如上面的最后一行。可能有一个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 个答案:

答案 0 :(得分:2)

awk -F\\t '$5 ~ /1$/ {next} {print}' 

如果可能存在尾随空白,那么您可能希望使用/1 *$/作为正则表达式来强制执行上述操作。如果您的文件非常简单,那么您可以使用grep -v '1$'(或grep -v '1 *$')等等。

当然,如果标准是基于所有尾随数字的数值,那么您必须进行调整。 (在这种情况下,你必须考虑" 01"," 1E0"," 1.0"," 0.1e1&#34 ;等等。)