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

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

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

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 печатает текущую строку?
  • Извлечь имена хостов из не хэшированных ssh known_hosts
  • awk для обработки строк с нулями по столбцам
  • awk - изменить значение
  • Пакетное переименование файлов изображений по возрасту плюс дата добавления и переменная в имя файла
  • Вывод в stdout работает, сбой при перенаправлении в файл или в fifo
  • Передача переменной временной метки из оболочки в gawk
  • Использование AWK для объединения файлов
  • Разница между gawk и awk
  • как конкатенировать следующую строку, когда условие истинно awk
  • awk, если регулярное выражение не совпало
  • Почему этот gawk coprocess висит?
  • Условное предложение if в awk
  • Interesting Posts

    Какие разделы следует шифровать?

    Как установить Timeout для команды ssh, а также вернуть результат удаленных команд

    FreeBSD 9.1 buildworld не работает в libclangsema

    Извлеките / замените системное требование с помощью вставки

    Как передать имя функции тестируемому?

    Почему поля, не разделенные пробелом на выходе этого примера?

    Использование пользовательского имени для корневого устройства в GRUB

    Как собирать случайные фрагменты файла tar?

    Как добавить содержимое конкретного текстового файла в каждый текстовый файл в каталоге и его подкаталогах?

    Сопоставление путей Windows к путям Linux для VirtualBox

    Как подключить USB-устройство с помощью jmtpfs в Linux (Debian 9)?

    Горизонтальная конкатенация файлов

    Не удается запустить определенные полноэкранные приложения

    Buliding libaffa: running make говорит: ничего не нужно делать для «всех»,

    Может ли файл быть извлечен его inode?

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