Вот основная команда, которую вы можете адаптировать к своим индивидуальным потребностям.
awk '{print $0 > $1}' inputfile
РЕДАКТИРОВАТЬ: Извините, я только что понял, что неправильно прочитал ваш вопрос, это неправильный ответ, хотя вы можете достаточно легко «соединить» файлы с пустыми строками
Вот возможное решение
for file in $(awk '{print $1; print $0 > $1}' data.txt | sort | uniq)
do
cat $file
echo
rm $file
done > output.txt
Решение, просто используя awk, если файл предварительно отсортирован:
awk '{a=$1; if (b != "" && a != b) {printf "\n";}; print $0; b = a}' inputfile
Переработано после комментариев don_crissti (спасибо!)
awk '{if (a != "" && a != $1) {printf "\n";}; print $0; a = $1}' inputfile