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

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

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 на все столбцы этой строки.

  • Как сохранить смешанные форматы перевода строки в gawk?
  • Исключение переменных gawk для команд оболочки
  • patsplit vs раскол в gawk
  • Разница между gawk и awk
  • Как подключить сортировку к gawk?
  • Объединить две операции в одну команду - awk
  • Помощь в командной строке Centos gawk
  • элементы доступа в строчном массиве - символ рассеяния @
  • 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 - лучшая ОС в мире.