Вот один из способов сделать это:
awk -F';' 'BEGIN { getline; id=$1; line=$0 } { if ($1 != id) { print line; line = $0; } else { line = line ";" $0; } id=$1; } END { print line; }' t.txt
Объяснение:
Установить разделитель полей на ;
:
-F';'
Начать с чтения первой строкиввода (getline
), сохраните первое поле ($1
) как id
, а первую строку ($0
) как line
:
BEGIN { getline; id=$1; line=$0 }
Для каждой строки ввода, проверьте, отличается ли первое поле от сохраненного идентификатора:
if ($1 != id)
Если это так, распечатайте сохраненную строку и сохраните новую ($0
):
print line; line = $0;
В противном случае добавьте новую строку к сохраненным строкам:
line = line ";" $0;
и сохраните новый идентификатор:
id=$1
В конце выведите все, что осталось в line
:
END { print line; }