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

Awk command to eliminate rows with specific empty fields

我的任务是消除这些行的第 99(最后)列为空的行。我尝试了以下命令:

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

它删除了一些带有白色的行space,但我发现有些行在第 99 列的位置仍然有 space。

我正在处理的数据是这样的: 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 列为空的所有行。但是怎么办?提前谢谢你。

像下面这样简单的东西可以用来检查你描述的内容。

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

但是,当我 wget 你提供的文件作为示例时,它是制表符分隔的并且有 99 列,而不是 94。此外,该文件有 CRLF 行结尾,所以 awk 它看起来像最后一列的值是一个回车return。使用该示例并对上述 awk 进行以下修改似乎可以满足您的要求。

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

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

另外,请听取评论者关于形成更好问题的建议,我必须自己在这里弄清楚关于你的文件的很多事情,大多数 SO 用户不会为你做那件事。