删除 shell 中包含多个字符串的行
delete lines containing multiple strings in shell
我有一个 ~15k rows/records 的文件,如下所示:
$ 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
what I what is to remove all the lines like the those of the second row:
chrx NA NA NA NA NA NA
这对在座的许多人来说可能容易得多,但我对此感到有点沮丧。有人可以帮帮我吗。谢谢
试试这样的东西:
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
这将在实际删除行之前创建回文件
您可以试试下面的 sed 命令。
sed '/^chr[0-9]\+\([[:blank:]]\+NA\)\+$/d' file
这将删除所有具有一个或多个 NA 的行。
我会使用:
grep -vP '^chr\d+(\s+NA){6}\s*$' <infile >outfile
这可能适合您 (GNU sed):
sed -r '/(\s+NA){6}/d' file
删除包含 6 个或更多所需字符串的任何行
sed '/\(\s\s*NA\)\{6\}/d' file
也应该适用于大多数 seds。
我有一个 ~15k rows/records 的文件,如下所示:
$ 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
what I what is to remove all the lines like the those of the second row:
chrx NA NA NA NA NA NA
这对在座的许多人来说可能容易得多,但我对此感到有点沮丧。有人可以帮帮我吗。谢谢
试试这样的东西:
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
这将在实际删除行之前创建回文件
您可以试试下面的 sed 命令。
sed '/^chr[0-9]\+\([[:blank:]]\+NA\)\+$/d' file
这将删除所有具有一个或多个 NA 的行。
我会使用:
grep -vP '^chr\d+(\s+NA){6}\s*$' <infile >outfile
这可能适合您 (GNU sed):
sed -r '/(\s+NA){6}/d' file
删除包含 6 个或更多所需字符串的任何行
sed '/\(\s\s*NA\)\{6\}/d' file
也应该适用于大多数 seds。