Мне нужно заменить второе вхождение шаблона (которое соответствует последнему полю) на другое, а также сохранить количество всех таких изменений, сделанных в файле.Заменить второе вхождение шаблона в строке с использованием awk
Пример: try.txt
Hi
Change apple orange guava mango banana orange
It's hot outside
Change tom greg fred harry steve fred
George is a cool guy
Change mary lucy becky karly jill karly
thank you
Во всех линиях, что имеет шаблон «Change», я хочу, чтобы заменить последнее слово, например, «оранжевые» во второй строке, скажем, грушу. Обратите внимание, что первый апельсин не следует изменять. Я также хочу добавить суффикс, который показывает количество изменений, произошедших в файле.
Я пробовал следовать, но он менял оба места (1-й апельсин и 2-й апельсин, 1-й и 2-й фред, 1-й карли и 2-й карли), тогда как я хотел изменить только второе появление.
awk 'BEGIN {cntr=0} {if (/Change/) {gsub($NF,"pear"); OFS=""; print $0,cntr; cntr++} else {print}}' try.txt
Выход:
Hi
Change apple pear guava mango banana pear0
It's hot outside
Change tom greg pear harry steve pear1
George is a cool guy
Change mary lucy becky pear jill pear2
thank you
Желаемый результат:
Hi
Change apple orange guava mango banana pear0
It's hot outside
Change tom greg fred harry steve pear1
George is a cool guy
Change mary lucy becky karly jill pear2
thank you
Когда GSUB заменяется подлодки, он меняется только первое вхождение. Любая помощь приветствуется.
Привет, Кент, спасибо, связка. Первое решение сработало. Но второй не меняет ввод. Он печатает файл как есть. – user6129328
@ user6129328 Обе строки тестируются здесь с помощью gnu awk. – Kent
Мне также нужно небольшое расширение для этого: что, если у меня есть другой шаблон, такой как «Change2», где все строки, содержащие этот шаблон, нужно заменить, скажем, peal2, а также иметь свой собственный счетчик. – user6129328