我有一个制表符分隔的文件,如下所示:
gene v1 v2 v3 v4
g1 NA NA NA NA
g2 NA NA 2 3
g3 NA NA NA NA
g4 1 2 3 2
每行中的字段数是固定且相同的。我想从上面的文件中删除那些行,其中从第 2 列到最后一行的每一行的所有字段都是 NA。然后输出应如下所示:
gene v1 v2 v3 v4
g2 NA NA 2 3
g4 1 2 3 2
我有一个制表符分隔的文件,如下所示:
gene v1 v2 v3 v4
g1 NA NA NA NA
g2 NA NA 2 3
g3 NA NA NA NA
g4 1 2 3 2
每行中的字段数是固定且相同的。我想从上面的文件中删除那些行,其中从第 2 列到最后一行的每一行的所有字段都是 NA。然后输出应如下所示:
gene v1 v2 v3 v4
g2 NA NA 2 3
g4 1 2 3 2
与
awk
:循环遍历从第二个字段开始的字段,如果
NA
找到不包含的字段,则打印该行。然后打破循环。使用 GNU sed
简短说明:
g[0-9]\+\(\s*NA\s*\)\+$
是一个正则表达式匹配g
,后跟至少一个数字,然后是任意数量的NA
s,其间有可选空格,直到行尾。sed -e '/<regex>/d'
删除所有匹配的行<regex>
具有相同含义的更标准的正则表达式是:
使用
all
Perl List::Util 模块:与
grep
:这会导致 grep不显示
-v
整行 (-x
) 匹配的 ( ) 行:你可以试试: