Скрипт awk некорректно работает с gsub $ 10 - PullRequest
0 голосов
/ 14 мая 2018

У меня есть много форм, которые нужно сгенерировать.

    $>cat debug-form-letter
    The first field is $1, the second $2, the third $3,
    the 10th field is $10,but  the 10th correct value  is varA.


    $> cat debug-replace-value
    var1|var2|var3|var4|var5|var6|var7|var8|var9|varA|varB

    $> cat debug-replace-form-letter.awk
    BEGIN {FS = "|"
                       while (getline <"debug-form-letter")
                       line[++n] = $0
       }
    {for (i = 1; i <= n; i++) {  
                       s = line[i]         
                       for (j = 1; j <= NF; j++)  
                                  gsub("\\$"j, $j, s)
                       print s
               }
       }

- я позвонил

    $> awk -f debug-replace-form-letter.awk debug-replace-value 

- 10 Я хочу получить вот так

    The first field is var1, the second var2, the third var3,

    the 10th field is varA,but  the 10th correct value  is varA.

- 20, но я получаю это

    The first field is var1, the second var2, the third var3,

    the 10th field is var10,but  the 10th correct value  is varA.

вышеуказанные $ 10 не верны, они становятся $ 1 плюс 0, я пытаюсь сделать двойную кавычку и одинарную кавычку, это тоже не работает.

И $ 11 становится $ 1 плюс 1.

мой awk 4.1.3, и я обновляюсь до последней версии, он тоже не работает.

    $> awk -V
    GNU Awk 4.1.3, API: 1.1
    Copyright (C) 1989, 1991-2015 Free Software Foundation.

что не так с моим скриптом? как я могу заставить его работать?

1 Ответ

0 голосов
/ 14 мая 2018

Измените внутренний цикл for на

for (j = NF; j >= 1; j--)

В вашем случае, $1 сопоставляется до того, как $10 сможет найти совпадение.

...