O erro básico que você tem é que gsub(/cuv1/, "cuv2")
não procurará as variáveis, procurará a string cuv1
e substituirá por cuv2
. Para usar as variáveis, você quer:
gsub(cuv1,cuv2);
O próximo problema é que você não está realmente dizendo awk
para imprimir nada. A ação padrão de awk
quando uma expressão é avaliada como true é imprimir a linha, portanto, seu comando (com a correção acima) imprimirá todas as linhas em que a substituição funcionou, mas nenhuma outra.
Finalmente, você parece estar esperando que o awk faça a mudança no topo do arquivo original. Para isso, você precisa da extensão GNU awk (gawk) -i inplace
. Isso, no entanto, é relativamente novo e não é portátil. Não funcionará em todos os sistemas. Colocando tudo isso junto, obtemos (assumindo o GNU awk):
awk -i inplace -v cuv1="$word" -v cuv2="$replace" '{gsub(cuv1,cuv2); print;}' "$file"
Soluções mais simples usando sed
e perl
:
sed -i "s/$word/$replace/g" "$file"
perl -i -pe "s/$word/$replace/g" "$file"