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

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

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

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

  • Каким образом можно фильтровать текстовый файл для удаления пустых строк?
  • Удалить строки, начинающиеся с #
  • повторить строку, разделив одно поле
  • автоматические процессы убийства
  • Управляющий символ в awk-выходе
  • Перекрестные ссылки по всем файлам
  • Я также попытался использовать grep для поиска слова, начинающегося с r, используя:

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

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

  • awk + как выполнить ИЛИ в awk
  • Awk не дает никакого результата
  • Метод командной строки для поиска повторяющихся опечаток с номерами строк
  • Grep каталог и возвращаемый список с номерами строк
  • Когда использовать grep, less, awk, sed
  • grep шаблон перед другим шаблоном и распечатать все
  • 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 - лучшая ОС в мире.