我的任务是在这些行的第99列(最后一列)为空时消除行。我试过下面的命令:
awk '$99 !~ /\s+/' BRCA-TP.maf.annotated > test
它消除了一些带有空格的行,但我发现有些行仍然在第99列的位置有空格。
上述数据的表示:
---- col95 col96 col97 col98 col99
row1 aaaa aaaa aaaa aaaa
row2 bbbb bbbb bbbb bbbb
row3 cccc cccc cccc cccc
我想用空的第94列消除所有行。但是怎么样?提前谢谢。
答案 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用户都不会为你做这些。