2015-12-05 3 views
0

Как настроить следующий код, чтобы заменить каждое вхождение значения, установленного для элемента ThreadGroup.num_threads.Как заменить все события с помощью оператора AWK

Here is the code I'm trying to make work. 

    awk ' BEGIN { FS = "[<|>]" } 
    { 
      if ($2 == "stringProp name=\"ThreadGroup.num_threads\"") { 
        $newValue 
      } 
      print 
    } 
    ' Test1.jmx 

Вот фрагмент XML, который я разбираю.

 <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"> 
    <stringProp name="ThreadGroup.num_threads">3</stringProp> 
    </ThreadGroup> 
    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group2" enabled="true"> 
    <stringProp name="ThreadGroup.num_threads">3</stringProp> 
    </ThreadGroup> 



newValue=999999 

ответ

1

В вашем коде переменная newValue так и не определена. Кроме того, вам не нужно $ перед своими собственными переменными.

Вот мое предложение:

awk '$0 ~ /stringProp name="ThreadGroup.num_threads"/ 
    {sub(/<stringProp name="ThreadGroup.num_threads">[0-9]+/, 
     "<stringProp name=\"ThreadGroup.num_threads\">999999", 
     $0)} 
    {}1' inputFile 

первая линия: проверить, содержит ли текущая строка текста stringProp name="ThreadGroup.num_threads"
2-й 4-й линии: Если да, то я заменить строку <stringProp name="ThreadGroup.num_threads"> если он за ним следует одно или несколько номеров одной строкой, за которой следует 999999.
5-я строка: Наконец, я выводю каждую строку.

Конечно, вы можете определить переменную:

awk 'BEGIN{newValue=999999} 
    $0 ~ /stringProp name="ThreadGroup.num_threads"/ 
    {sub(/<stringProp name="ThreadGroup.num_threads">[0-9]+/, 
      "<stringProp name=\"ThreadGroup.num_threads\">"newValue, 
      $0)} 
    {}1' inputFile 

Выход есть:

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"> 
<stringProp name="ThreadGroup.num_threads">999999</stringProp> 
</ThreadGroup> 
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group2" enabled="true"> 
<stringProp name="ThreadGroup.num_threads">999999</stringProp> 
</ThreadGroup> 
+0

@ Ф. Knorr Это действительно полезно , Благодарю. Однако, тестируя его со следующим, он добавил дополнительные 2 строки. Я думаю, что это может быть немного неверно. 3 3 user1654528

+0

Что вы подразумеваете под «добавлением дополнительных 2 строк»? Посмотрите на результат, который я дал в своем ответе: это ваш желаемый результат? –

+0

вместо обновления добавляет новую строку с правильными значениями. – user1654528

0

Возможно, это проще с sed

$ sed -r 's/("ThreadGroup.num_threads">)([0-9]+)</\19999</g' 
Смежные вопросы