como manter as linhas que possuem uma string específica

0

Seguindo minha pergunta anterior , como posso manter as linhas com somente uma não -N genótipo?

A N N A N N A N N N N
N N N C N N N N N N N
N N N N N N G N N N N
N N N T N N N N N N N
G N N N G N N N N N N
C N N C N C N N N N N

minha saída desejada:

N N N C N N N N N N N
N N N N N N G N N N N
N N N T N N N N N N N
    
por Anna1364 11.10.2017 / 00:52

5 respostas

2
sed -n '/^[N ]*[^N ][N ]*$/p' input.txt

Imprime linhas contendo apenas um caractere diferente de N.

Ou, o mesmo, mas por outro caminho.

sed '/[^N ][N ]*[^N ]/d; /^[N ]*$/d' input.txt

Primeiramente, exclui todas as linhas que contêm mais de um caractere não-N e, em seguida, exclui as linhas que contêm apenas N caracteres.

    
por 11.10.2017 / 01:29
2
grep -x '[N ]*[^N ][N ]*'

Para um e apenas um não-N

grep -v '[^N ].*[^N ]'

Para no máximo um não-N (também corresponde a linhas ou linhas vazias com apenas N s).

Como a entrada parece conter apenas caracteres do conjunto de caracteres portátil, convém corrigir a localidade para C para acelerar as coisas ( LC_ALL=C grep... ).

    
por 11.10.2017 / 10:14
1

Você pode criar um script contendo:

#!/bin/sh
while read i
do
        n='echo $i | tr " " "\n" | uniq -c | grep "N" | awk '{print $1}''
        if [ "$n" == "10" ]
        then
                echo $i
        fi
done < "$1"

dê direitos de execução ao seu script:

$ chmod +x myScript.sh

e depois executá-lo

$ ./myScript.sh myFile.txt

Então você pode girar quantos N você quiser modificar em sua linha

if [ "$n" == "10" ]

Não é muito elegante, mas faz o trabalho e não requer nada

    
por 11.10.2017 / 00:57
1

Usando awk . Pular Empty / Whitespaces (Tabs + / Spaces) / Somente as linhas de N e o resto da impressão, onde apenas um genótipo não-N é visto.

awk -F'[^N \t]' 'NF==2'
    
por 11.10.2017 / 09:18
0

Outra resposta sed:

sed -n 'h; s/[N ]//g; /^.$/ {g; p}' file

ou awk

awk '
    {
        n=0 
        for (i=1; i<=NF; i++) {
            if ($i != "N") n++ 
            if (n > 1) break
        }
    } 
    n == 1
' file
    
por 11.10.2017 / 02:49