2015-11-01 1 views
1

Следующий скрипт заменяет каждый второй экземпляр. - Любые идеи, как я могу настроить команду awk, чтобы она заменяла второй экземпляр только один раз?Как заменить второй экземпляр только один раз с помощью awk

расположение Сценарий ссылается на файл под названием basicTest.jmx, который содержит следующую TXT

hashTree 
hashTree 
hashTree 
hashTree 
hashTree 
hashTree 
hashTree 

Вот сценарий:

scriptLocation="basicTest.jmx" 

myVar="FOOO__BARRRR" 

awkOut=$(awk -v s='hashTree' -v myVar="$myVar" '$0~s{c++} c==2{sub(s, myVar); c=0} 1' "${scriptLocation}") 
echo "$awkOut" > $scriptLocation 

Это то, что мне нужно выход выглядеть следующим образом:

hashTree 
FOOO__BARRRR 
hashTree 
hashTree 
hashTree 
hashTree 
hashTree 

Это текущий ошибочный выход:

hashTree 
FOOO__BARRRR 
hashTree 
FOOO__BARRRR 
hashTree 
FOOO__BARRRR 
hashTree 
+0

Вы уверены, что вы должны сбросить c = 0 в своем скрипте? –

+0

Я удалил c = 0 и hey bingo, котор он работал-Спасибо – user1654528

ответ

0

удаления с = 0 исправлена ​​проблема с: Рабочая версия below.- Спасибо всем за помощь.

awkOut=$(awk -v s='hashTree' -v myVar="$myVar" '$0~s{c++} c==2{sub(s, myVar); } 1' "${scriptLocation}") 
1
$ awk -va=hashTree -vb=FOOO__BARRRR '$1~a&&++c==2{$1=b}1' filename 
hashTree 
FOOO__BARRRR 
hashTree 
hashTree 
hashTree 
hashTree 
hashTree 
+0

Пожалуйста, объясните, что код ... – aschipfl

+0

Пожалуйста, добавьте объяснение к вам, чтобы другие могли легко понять ваш код. – Brody

+0

@Brody Извините! Мой английский плохой. Я не могу использовать английский объяснять – bian

Смежные вопросы