Я решил, что ваш входной файл разделен табуляцией
и что вы получаете запятые между описаниями в разных строках.
(потому что мне не нравилось видеть "... обслуживание номеров ...")
Ваш пример данных
cat input;
Date AMOUNT OP DESCRIPTION CODE
12/10/2018 $123,45 id01 payment for hotel in Las Vegas 005214875462
room
room service
dinner
golf club
12/11/2018 $400,00 id04 cash from ATM 0528158852687
located in L.A.
12/12/2018 $1000,00 id99 ACME tornado pill 854674852658
Мой скрипт
cat collapse_column.awk
#! /usr/bin/awk -f
# collapse_column.awk
BEGIN{FS="\t"; OFS=";"; getline}
/^[0-9]/{
if(Date){
print Date,AMOUNT,OP,DESCRIPTION,CODE;
}
Date=$1;AMOUNT=$2;OP=$3;DESCRIPTION=$4;CODE=$5
}
/^[^0-9]/{
gsub(/ [[:space:]]+/, ",")
DESCRIPTION = DESCRIPTION $0
}
END{print Date,AMOUNT,OP,DESCRIPTION,CODE}
Результат
$ ./collapse_column.awk input
12/10/2018;$123,45;id01;payment for hotel in Las Vegas,room,room service,dinner,golf club;005214875462
12/11/2018;$400,00;id04;cash from ATM,located in L.A.;0528158852687
12/12/2018;$1000,00;id99;ACME tornado pill;854674852658
скрипт awk распознает полные строки, начинающиеся с цифрыи назначить поля переменным, строки которых не начинаются с цифры, предполагается, что они являются продолжением предыдущего ряда, и накопленные усеченные значения.при обнаружении новой полной строки выводится предыдущая полная строка вместе с накопленными элементами