Al reemplazar $1
también reemplaza la parte inicial de$10
(y $11
, y $12
etc. ). $1
se reemplaza por var1
, por lo que $10
se reemplaza porvar10
(var1
y el sobrante 0
de$10
).
Debe ser más específico con su expresión regular para que solo coincida con el número específico que le preocupa, y nada más.
Hay dos formas de hacerlo correctamente:
$10
a $1
en lugar de $1
a$10
(o cualquiera que sea la cantidad de variables que tenga ). Uso de la segunda opción:
awk 'NR == FNR { split($0, vars, "|"); next }
{ for (i = length(vars); i >= 1; --i) gsub("\\$" i, vars[i]) } 1' debug-replace-value debug-form-letter
Para los textos dados, esto genera
The first field is var1, the second var2, the third var3,
the 10th field is varA,but the 10th correct value is varA.