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

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

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

  • Объединить две операции в одну команду - awk
  • Файл анализа с Awk только в том случае, если первая строка соответствует шаблону
  • Условное предложение if в awk
  • Вывод в stdout работает, сбой при перенаправлении в файл или в fifo
  • инструменты редактирования потока: вывод, что очищается
  • Разница между gawk и awk
  • Как добавить / добавить временную метку для вывода grep?
  • Использование 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 печатает текущую строку?
    Interesting Posts

    Я использовал g ++, использовал его, установил make, и теперь g ++ невозможно установить

    сканировать каталоги файлов .pdf и .ps для ключевого слова в заголовке и авторе

    В чем причина наличия чисел в скобках функции?

    Как сбрасывать журналы dmesg AKA Kernel в один .txt-файл из загрузки ядра?

    Найти результат, используемый в выражении if

    Ошибка в формате при добавлении столбца с sed

    Работа Cron не работает

    Как отлаживать пересылку портов SSH

    Обновление Redhat с помощью командной строки

    Переместите некоторые файлы на каждый каталог в другой каталог

    Как использовать lsof для идентификации входящих TCP-соединений?

    Как передать ssh на удаленный сервер с помощью закрытого ключа?

    Как предотвратить появление сообщения «Последний вход:» при использовании sftp?

    Как проверить, есть ли у меня root-доступ?

    Отображать только соответствующие фрагменты diff / patch на основе регулярного выражения

    Linux и Unix - лучшая ОС в мире.