Para o seu exemplo:
egrep '1 [[:digit:]]+ (GGGGGGGC|CCTCCCCT)' file
--- editar: então tente isto:
egrep -v '([A-Z]){8}' data
Eu tenho um arquivo enorme que contém 80 genomas e cinco cromossomos. Eu queria saber se há uma maneira fácil de selecionar apenas as linhas de um cromossomo (por exemplo, 1), mas apenas na posição que mostra as VARIAÇÕES de SNP.
1 180754 GGGGGGGCC
1 180755 CCCCCCCCC
1 180756 CCTCCCCTC
1 180757 AAAAAAAAA
1 180759 TTTTTTTTT
3 7874113 TTTTTTTTT
3 7874114 GGGGGGGGG
3 7874115 GGGGGGGGG
3 7874116 GGGGGGGGG
Isso é o que eu quero no final:
1 180754 GGGGGGGC
1 180756 CCTCCCCT
Para o seu exemplo:
egrep '1 [[:digit:]]+ (GGGGGGGC|CCTCCCCT)' file
--- editar: então tente isto:
egrep -v '([A-Z]){8}' data
Com base nos dados de amostra fornecidos, você pode fazer isso usando grep
. Dado que os únicos valores válidos para nucleotídeos são A, C, G, T, podemos criar um conjunto de caracteres com apenas aqueles incluídos.
$ grep -Ev '([ACGT]){8}|^$' sample.txt
1 180754 GGGGGGGCC
1 180756 CCTCCCCTC
Isso funciona ignorando todos os resultados que são mono-tipados. A expressão regular [ACGT]{8}
corresponde a todas as strings que são da forma AAAAAAAA, CCCCCCCC, etc. A reversão da correspondência é realizada por meio da opção -v
.
-v, --invert-match
Invert the sense of matching, to select non-matching lines. (-v
is specified by POSIX.)
O uso de -E
torna nosso argumento para grep
uma expressão regular que corresponde às linhas acima, [ACGT]{8}
ou vazias ( ^$
).
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see
below). (-E is specified by POSIX.)
A barra vertical (aka. pipe ( |
)) entre os 2 argumentos torna isso um ou aquele tipo de situação correspondente.
Por exemplo, grep -Ev "arg1|arg2" <file>
. arg1
seria [ACGT]{8}
, enquanto arg2
seria ^$
.
Não sei exatamente o que você está perguntando (seria útil explicar sua exigência lexicamente em vez de semanticamente ), mas
sed -r sed -r '/^[0-9]+[[:space:]]+[0-9]+[[:space:]]+(.)+\>/d'
excluirá (isto é, não imprimirá) quaisquer linhas nas quais o terceiro campo delimitado por espaço consiste inteiramente de repetições do mesmo caractere inicial, por exemplo,
$ sed -r '/^[0-9]+[[:space:]]+[0-9]+[[:space:]]+(.)+\>/d' genomes.txt
1 180754 GGGGGGGCC
1 180756 CCTCCCCTC
Se você sabe que apenas o campo genoma pode conter letras maiúsculas, pode ser seguro fazer uma expressão muito mais simples
sed -r '/\<([A-Z])+\>/d' genomes.txt