Eu tenho um arquivo delimitado por tabulação que se parece com isso:
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
O número de campos em cada linha é fixo e é o mesmo. Quero remover essas linhas do arquivo acima, onde todos os campos de cada linha da coluna 2 à última são NA. Em seguida, a saída deve se parecer com:
gene v1 v2 v3 v4
g2 NA NA 2 3
g4 1 2 3 2
text-processing
awk
perl
bioinformatics
user3138373
fonte
fonte
\s\d
diferencia entre as linhas "boa" e "ruim".is.na
verificação, se eu pensarRespostas:
Com
awk
:Faça um loop pelos campos começando no segundo campo e imprima a linha se um campo que não contiver
NA
for encontrado. Então quebre o ciclo.fonte
Usando o GNU sed
Breve explicação:
g[0-9]\+\(\s*NA\s*\)\+$
é uma correspondência de regexg
seguida por pelo menos um dígito e, em seguida, qualquer número deNA
s com espaços opcionais até o final da linha.sed -e '/<regex>/d'
exclui todas as linhas que correspondem<regex>
Uma regexp mais padrão com o mesmo significado seria:
fonte
\+
e\s
são expressões regulares não-padrão e corresponderá a um simples+
ous
na maioria dassed
versões. Use em\{1,\}
vez de\+
e em[[:space:]]
vez de\s
ter código portátil.Com a
all
partir do módulo Perl List :: Util:fonte
Com
grep
:Isso faz com que o grep não exiba (
-v
) linhas onde a linha inteira (-x
) corresponde:fonte
{4}
em vez de*
depois doNA
grupo, e você pode querer mudar o primeiro[[:blank:]]*
a[[:blank:]]+
fazer os separadores de espaço em branco obrigatório. Independentemente disso, nunca entendi por que todo mundo insiste em retirar aawk
bazuca para resolver esses problemas simples de filtragem quegrep
lidam com facilidade.*
para que esta solução funcione igualmente bem para qualquer número arbitrário deNA
colunas, desde que todas sejam NA.Você poderia tentar:
fonte