#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
и распечатайте снова.