awk命令消除具有特定空字段的行

时间:2015-03-11 21:58:45

标签: unix awk

我的任务是在这些行的第99列(最后一列)为空时消除行。我试过下面的命令:

awk '$99 !~ /\s+/' BRCA-TP.maf.annotated > test

它消除了一些带有空格的行,但我发现有些行仍然在第99列的位置有空格。

我正在处理的数据是: http://gdac.broadinstitute.org/runs/analyses__2014_10_17/reports/cancer/BRCA-TP/Mutation_Assessor/BRCA-TP.maf.annotated

上述数据的表示:

---- col95   col96   col97   col98   col99   
row1 aaaa    aaaa    aaaa    aaaa  
row2 bbbb    bbbb    bbbb    bbbb  
row3 cccc    cccc    cccc    cccc

我想用空的第94列消除所有行。但是怎么样?提前谢谢。

1 个答案:

答案 0 :(得分:2)

如下所示的简单方法可用于检查您所描述的内容。

awk -F'\t' '$94==""||$94==" "||$93=="neutral" {next;} {print;}' inputfile > outputfile

但是,当我把你提供的文件作为一个例子时,它是制表符分隔的并且有99列,而不是94列。此外,该文件有CRLF行结尾,所以awk看起来像是值最后一列是回车。使用具有上述awk的以下修改的样本似乎可以做你想要的。

awk -F'\t' 'BEGIN {RS="\r\n"} $99==""||$99==" "||$98=="neutral" {next;} {print;}' inputfile > outputfile

在潜入使用之前,你会想要在awk上做一些阅读。问题中的示例脚本缺少-F'\t'参数告诉awk文件是制表符分隔的,您需要删除CR个字符或告诉awk RS是CRLF,然后你可以将条件块前面的逻辑测试链接到一个以上的检查。

另外,请注意评论者关于形成更好问题的建议,我必须自己弄清楚你自己的文件很多东西,大多数SO用户都不会为你做这些。