как добавить строку с помощью sed / awk после определенного текста

#awk #sed

#awk #sed

Вопрос:

я хотел бы перевести этот входной файл с помощью sed или awk:

 input
1 AA
3 BB
5 CC

output
1 AA
3 BB
3 GG
5 CC
  

самый близкий синтаксис, который я нашел в этом sed -i '/^BB:/ s/$/ GG/' файле сайта, но это так 3 BB GG . То, что мне нужно, похоже на замену vi, вставку и регулярное выражение.
можно ли это сделать с помощью sed или awk? спасибо
Rand

Ответ №1:

С помощью GNU sed:

 sed -r 's/^([^ ]*) BB$/amp;n1 GG/' file
  

Вывод:

1 AA
3 BB
3 GG
5 куб. см

Ответ №2:

Это может сработать для вас (GNU sed):

 sed '/BB/p;s//GG/' file
  

Если строка содержит требуемую строку, распечатайте ее, а затем замените ее другой строкой.

Ответ №3:

awk — прекрасный выбор для этого:

 awk '{print $0} $2=="BB"{print $1,"GG"}' yourfile.txt
  

Это выведет строку {print $0} . И затем, если второе поле в строке равно «BB», будет напечатано первое поле в строке (число) и текст «GG».

Пример использования:

 >echo "1 AAn3 BBn4 RR" | awk '{print $0} $2=="BB"{print $1,"GG"}'
1 AA
3 BB
3 GG
4 RR
  

Ответ №4:

В awk:

 $ awk '1; /BB/ amp;amp; $2="GG"' input
1 AA
3 BB
3 GG
5 CC
  

1 печатает запись. Если BB в только что напечатанной записи было, замените ее на GG и распечатайте снова.