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

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

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 ' 
  • Каков наилучший способ избавиться от шаблона в нескольких файлах php?
  • Как умножить два столбца в файле на постоянное число
  • Удалять файлы старше 5 дней в UNIX (дата в имени файла, а не в метке времени)
  • Получить текст между словом и последней строкой?
  • Переключение с grep на sed
  • Удалите 2 и 3 строки в текстовом файле, но не 1
  • Удалить до заданного символа, начиная с заданной строки
  • Замена текста между двумя комментариями HTML
  • «Sed» переписать файл для отображения целых чисел и удалить оставшиеся символы
  • удаление строки из файла с помощью grep или sed, но количество строк все равно одинаково
  • AWK Поиск массивного файла и запись в имя переменной
  • Linux и Unix - лучшая ОС в мире.