Em uma coluna específica, preciso substituir as linhas por 'X', mas somente se elas não corresponderem a nenhum dos 3 padrões possíveis (3 variáveis). Observe que a coluna nem sempre será a mesma coluna, portanto, o código deve funcionar com o próprio número da coluna sendo um número variável. O mesmo pode ser dito para os 3 padrões possíveis. é difícil explicar sem demonstração. no exemplo, se você olhar para a coluna 1 e ver como ela altera os específicos para 'X' com base no 'GrabVariantOption's, provavelmente é mais claro do que qualquer coisa que eu possa explicar.
Exemplo de entrada:
A,A,A,X
A,G,T,X
C,A,G,T
A,C,G,T
f,X,A,g
g,T,A,A
m,s,G,A
G,s,m,A
Exemplo 3 padrões possíveis:
GrabVariantOption1=A
GrabVariantOption2=g
GrabVariantOption3=G
Algum pseudo código, que é meio que o princípio do que eu quero fazer:
Column=1
awk -F ',' -v a=$GrabVariantOption1 -v b=$GrabVariantOption2 -v c=$GrabVariantOption3 -v x=$Column '{$x; if NR!=a && NR!=b && NR!=c; flag=1} {if flag=1 NR==X }'
Saída de exemplo:
A,A,A,X
A,G,T,X
X,A,G,T
A,C,G,T
X,X,A,g
g,T,A,A
X,s,G,A
G,s,m,A
Ou aqui, pois são letras ASCII únicas:
NR
é uma variável especialawk
que contém o número do registro atual (número da linha aqui com o separador de registro padrão).$
é um operador para desreferenciar um campo. Então, sex
for o número do campo$ x
, você terá o conteúdo dox
º campo.Outra opção:
Tente isso,
Aqui está uma maneira de olhar para o pbm usando Gnu sed empregando regexes estendidas:
Com Perl você poderia fazer assim também: