Вы можете использовать sed
, чтобы получить то, что вы хотите:
sed -e '
/./!b
/[^[:space:]]/!b
/[^[:space:]][[:blank:]]\{1,\}[^[:space:]]/b
:loop
$q;N
/\n.*\S[[:blank:]]\+\S/b
s/\n/ /;tdummy
:dummy
s/[[:space:]]\{1,\}/&/3;t
bloop
' yourfile
Пояснения
- Пропустить пустые, пустые и строки с NF > 1.
- Настройка цикл do-while в точке, где пространство шаблона содержит строку с одним полем.
- Мы берем следующую строку и проверяем, имеет ли она NF > 1, после чего печатаем все пространство шаблонов и возвращаемся к чтению следующей строки.
- Теперь мы знаем, что следующая строка также состоит из одного поля, поэтому мы продолжим и обрежем новую строку, соединяющую эти две части в пространстве шаблона.
- Есть ли в пространстве шаблонов фрагменты из 3 пробелов? Если да, то мы печатаем все пространство шаблона и начинаем читать следующую строку.
- В противном случае мы возвращаемся к циклу, который, в свою очередь, считывает следующую строку, но прикрепляет ее к существующему пространству шаблонов.
Результат
1
4 5 6 7 19
20 22
24 26 27
29 30 31 32
34 40 50 56
58 100
234 235 270 500
1234 1235 1236 1237
2300 2303 2304 2307
2309
sps
29.10.2015, 22:56
Ссылка