删除shell中包含多个字符串的行

时间:2015-03-17 15:13:27

标签: shell sed

我有一个约15k行/记录的文件,如下所示:

$ head -50 skato.tsv 
chr gene    SKATO.pval  SKATO.pmin  rho cmaf    nsnps.gene
chr1    NA  NA  NA  NA  NA  NA
chr1    SAMD11  0.7068  0.5451  0   0.01214 5
chr1    NOC2L   0.09887 0.05592 0   0.1926  8
chr1    KLHL17  0.1262  0.09206 0   0.003241    3
chr1    PLEKHN1 0.01034 0.2067  0   0.5905  11
chr1    HES4    0.02433 0.02433 0   0.002427    1
chr1    ISG15   0.1942  0.1942  1   0.3803  2
chr1    AGRN    0.8922  0.7151  1   0.115   18
chr1    C1orf159    0.5763  0.361   0   0.03485 2
chr1    TTLL10  0.2172  0.1272  0   0.1869  11
chr1    TNFRSF18    0.4014  0.2909  0   0.01379 6
chr1    TNFRSF4 0.1456  0.1179  1   0.001619    2
chr1    SDF4    0.1963  0.1963  0   0.0008104   1

我删除所有第二行的行是什么:

chrx    NA  NA  NA  NA  NA  NA

对你们这里的许多人来说可能很容易,但我对此感到沮丧。有人可以帮助我吗?感谢。

4 个答案:

答案 0 :(得分:1)

您可以尝试以下sed命令。

sed '/^chr[0-9]\+\([[:blank:]]\+NA\)\+$/d' file

这将删除所有包含一个或多个NA的行。

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -r '/(\s+NA){6}/d' file

删除包含6个或更多所需字符串的任何行

sed '/\(\s\s*NA\)\{6\}/d' file

也适用于大多数seds。

答案 2 :(得分:0)

尝试类似:

egrep -v "chr[0-9]+\s+NA\s+NA" myfile.txt

或者如果你想坚持使用sed,那么

sed -r -i.bak "/chr[0-9]+\s+NA\s+NA/d" myfile.txt ##add multiple NA's that you wish to check for

在实际删除行之前会创建回文件

答案 3 :(得分:0)

我会用:

grep -vP '^chr\d+(\s+NA){6}\s*$' <infile >outfile