
Я хочу сделать некоторые манипуляции строками, но застрял в обработке строк за строкой. Мой файл выглядит так:
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 (здесьилиздесьнапример)