Comando AWK executado sem erro, mas sem modificar o arquivo

1

Estou aplicando o comando awk em um arquivo, mas esse arquivo não está sendo modificado. Alguém pode sugerir porque isso está acontecendo?

awk 'BEGIN{FS=OFS=""}; {if($692=="6") sub($690,"9");print $0;}' abc.txt >efg.txt

Nota: cada linha contém cerca de 1000 caracteres.

    
por Su Bho 26.05.2017 / 09:38

1 resposta

0

O que está errado

A questão principal é que você está usando sub() incorretamente. sub() deve substituir com base na correspondência de padrões (essa é a parte importante!). A sintaxe correta é:

sub(regular_expression,replacement,substring)

O que você está fazendo é sub($692,"9") , então você está dizendo para substituir a primeira ocorrência da mesma coisa que você vê no campo número 692, mas essa primeira ocorrência pode estar muito antes na linha.

Veja um exemplo:

$ echo "1253456" | awk 'BEGIN{FS=OFS=""};{if($4==3) sub($6,"@");print}'                                                                               
12@3456

Isso literalmente toma o que quer que esteja no 6º campo (que é o número 5) e remove a primeira ocorrência dessa coisa. O mesmo que o seu comando estava fazendo.

O que realmente deve ser feito

Para substituir um campo específico, você não precisa de sub() , basta atribuir diretamente ao campo.

awk 'BEGIN{FS=OFS=""}; {if($692==6) $690="9";print}' abc.txt >efg.txt

Observe que também removi $0 de print porque chamar o próprio print já assume $0 por padrão

    
por Sergiy Kolodyazhnyy 26.05.2017 / 10:40