Замените одно поле другим, если его запись начинается с определенной буквы

Если у меня есть файл что-то вроде:

223 898 teeth 223 899 mouth 223 900 r9 445 800 round 

Мой вопрос: как я могу использовать команду awk для замены столбца 2 на столбец 3, только для строки, в которой столбец 3 запускает букву «r»? Для замены я могу использовать gsub, но я не могу получить только эту строку, столбец три которой начинается с «r».

Я также попытался использовать grep для поиска слова, начинающегося с r, используя:

 grep "r*" filename | awk '{gsub($2,$3); print;}' 

Но эта команда заменяет столбец 2 на все столбцы этой строки.

  • Как найти все соответствия регулярному выражению в строке
  • Объединить диапазон столбцов с одним и тем же ключом
  • Условное предложение if в awk
  • awk - изменить значение
  • Как использовать awk для печати только строк, содержащих 5 столбцов
  • Замена строк с помощью словаря
  • Необходимо отфильтровать данные на основе двух столбцов, имеющих много отношений, используя awk
  • awk, если регулярное выражение не совпало
  • One Solution collect form web for “Замените одно поле другим, если его запись начинается с определенной буквы”

    Пытаться:

     $ awk '$3 ~ /^r/ {$2 = $3}1' file 223 898 teeth 223 899 mouth 223 r9 r9 445 round round 

    Это объединяет поиск и печать в одну команду awk , вместо того, чтобы использовать grep & awk . Вышеуказанные $3 ~ /^r/ найдут только линии, где 3-е поле начинается с r . В этих ситуациях awk заменит 3-е поле для второго поля.

    Если трейлинг- 1 у вас есть, он делает следующее. Он вычисляет истину, вызывающую awk для выполнения своей операции по умолчанию, { print $0 } .

    Рекомендации

    • Почему «1» в awk печатает текущую строку?
    Linux и Unix - лучшая ОС в мире.