Объединение полей из строк с различным количеством полей

Учитывая входные данные следующим образом:

xyabct pqwwt abcd pqr 

Я хотел бы объединить поля с поля 3, но не включая последний. Если поле 3 является последним полем, я хотел бы вставить местозаполнитель. Поэтому, учитывая введенный выше, это предпочтительный выход:

 xy a_b_c t pq w_w t abcd pq _ r 

Конечным результатом является то, что все линии будут иметь четыре поля. Возможно ли это в awk или cut или sed и т. Д.?

2 Solutions collect form web for “Объединение полей из строк с различным количеством полей”

 awk '{ s = m = "" for (i = 3; i < NF; i++) {m = ms $i; s = "_"} if (m == "") m = "_" print $1, $2, m, $NF}' 

Альтернативная версия sed для развлечения:

 sed -r 's/ */_/g; s/_/ /; s/_/ / # convert all to _, unconvert 1st 2 ts;:s; s/(.*)_/\1 / ;t # if a trailing third exists unconvert it s/ / _ /2 # else add one ' 
  • sed string для точного соответствия, содержащего /
  • Я хочу искать и заменять шаблон
  • Переименовать файл с помощью sed
  • Заменить значения в файле
  • Многострочный grep был связан с двумя тегами, отображать только последнее совпадение
  • сортировать файл по длине столбца / строки
  • любая команда, которая может форматировать html или xml из оболочки?
  • Очистка объединенных файлов XML
  • Помощь с sed - удаление определенных строк с определенной строкой
  • Обработка журналов PF FreeBSD с помощью tcpdump / sed / awk
  • распечатать определенную строку из нескольких файлов
  • Interesting Posts

    Emacs: ошибка при вызове функции в hook

    Linux Mint проигрывает / забывает / забывает сетевое подключение

    Два интерфейса, два адреса, два шлюза?

    bash. Почему тип -a выполняет «$ (printf 'a')» и можно ли вернуть исходный псевдоним?

    Как проверить раздел подкачки

    Не удается запустить команду configure: «Нет такого файла или каталога»

    Форматировать пакеты по вертикали в pacman

    Как начать сервис в systemd сразу после cryptsetup?

    Как узнать, какая информация используется для генерирования аппаратного кода

    Сравните три файла и распечатайте самое высокое значение

    Запуск ошибок Nemo с: Настройка схемы «org.nemo.preferences» не установлена

    Очистка apt-get не полностью удаляется

    Предотвратите нажатие клавиши Alt в меню фокусировки в Gtk 3

    Как передать команды процессу, работающему в фоновом режиме?

    Mac: самый простой способ перемещения нескольких дубликатов имен файлов в один каталог

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