Aqui está o seu código, expandido para visibilidade:
awk ' { if (! ($1 ~ /rs/ || $1 ~ /chr/) ) { ($1 == "chr"$1); print $0} }; else { print $0 } ' filename > newfilename
Há vários problemas com isso que vêm à mente
- Você está usando uma comparação de igualdade em vez de uma atribuição para tentar adicionar o
chr
prefix - Você colocou o que deveria ser uma atribuição entre colchetes
- Existe um
}
externo após o primeiroprint $0
- Não deve haver ponto e vírgula antes da
else
parte - Você está perdendo o fechamento final
}
após o código
Aqui está uma versão fixa, ainda expandida:
awk '
{
if (! ($1 ~ /rs/ || $1 ~ /chr/) )
{
$1 = "chr"$1;
print $0
}
else
{ print $0 }
}
' filename > newfilename
E, em seguida, podemos ver uma otimização simples para mover o print $0
repetido para fora da sua condição:
awk '
{
if (! ($1 ~ /rs/ || $1 ~ /chr/) )
{
$1 = "chr"$1
}
print $0
}
' filename > newfilename
Como isso é basicamente uma simples "condição → alteração", é possível usar a estrutura padrão do awk
para simplificar isso ainda mais. Aqui temos duas instruções awk
, processadas sequencialmente para cada linha do seu arquivo de entrada. A primeira linha prefixos chr
conforme necessário. O segundo imprime todas as linhas.
awk '
(! ($1 ~ /rs/ || $1 ~ /chr/) ) { $1 = "chr"$1 }
1
' filename > newfilename