awk и sed добавляют конец каждой связанной строки

awk и sed добавляют конец каждой связанной строки

Я хочу сделать некоторые манипуляции строками, но застрял в обработке строк за строкой. Мой файл выглядит так:

10.10.10.10 ABtest
10.10.10.11 ABprod

Я хочу добавить строку в каждую строку в соответствии со строкой в ​​конце строки.

Мой подход заключается в использовании awk для проверки строки ABtestв конце строки, а затем в преобразовании из ABtestв testс помощью sed. После этого я хочу добавить вывод к каждой связанной строке.

Я хочу вывести следующее:

10.10.10.10 ABtest test
10.10.10.11 ABprod prod

решение1

Нет необходимости в обоих, sedи awkвы можете использовать один инструмент. Код, который достигает вашей цели, awkможет быть

awk ' 
/AB/ { 
        printf $0
        gsub("^AB", "", $2)
        printf " %s\n", $2
     }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT

/<expression>/ищет регулярное выражение, и {<code>}часть сообщает awk, что делать с этой записью. В этом конкретном случае функция gsubзаменяет все появления 'AB' во втором столбце — если вы хотите просто заменить первое появление, используйте sub(), но что касается регулярного выражения, я думаю, вы можете использовать либо одно, либо другое с тем же результатом — и результат выводится впоследствии.

В вашем вопросе не ясно, есть ли какие-либо строки между теми, которые нужно редактировать, чтобы они были напечатаны без изменений. Если это так, вам нужно перейти к следующей записи после match-and-edit, например:

awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT

Может быть, вам следует создать еще более специфичный тест, используя if. Я настоятельно рекомендую вам взглянуть на некоторые ресурсы awk (здесьилиздесьнапример)

Связанный контент