tr -s '[:blank:]' '\n' < file
или
awk 'BEGIN{RS="[ \t\n]+"} 1' file
awk
для любого количества строк в группе и начинающихся с любой строчной буквы....
awk -v ORS= '{print (($0!~"^[a-z]"&&NR>1)?"\n":"")$0}END{ print "\n"}' file
Установите для ORS
пустое значение и печатайте \n
перед $0
всякий раз, когда $0
не начинается со строчной буквы, не забывая не ставить \n
перед первой строкой.
Выход
1. |1.99934| BD | 1| C 1 - H 2
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 2 s| 99.94%|p 0.00| 0.06%|
2. |1.99934| BD | 1| C 1 - H 3
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 3 s| 99.94%|p 0.00| 0.06%|
3. |1.99934| BD | 1| C 1 - H 4
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 4 s| 99.94%|p 0.00| 0.06%|
4. |1.99934| BD | 1| C 1 - H 5
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 5 s| 99.94%|p 0.00| 0.06%|
Примечание:в основном делает то же самое, что и ответ @steeldriver sed
в комментариях, если вы замените поиск f
регулярным выражением в группе захвата \n([a-z])
и повторно вставите захваченный символ \1
.
Я просто нахожу awk
более читаемым.
В экс:
printf '%s\n' g/^f/-1j wq | ex file
При этом используется общая команда g
для запуска -1j
oin для всех строк, начинающихся с f
. Join просто соединяет строки.
Использованиеpaste
:
$ paste -d '\n\0\n\n' - - - - <file
1. |1.99934| BD | 1| C 1 - H 2
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 2 s| 99.94%|p 0.00| 0.06%|
2. |1.99934| BD | 1| C 1 - H 3
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 3 s| 99.94%|p 0.00| 0.06%|
3. |1.99934| BD | 1| C 1 - H 4
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 4 s| 99.94%|p 0.00| 0.06%|
4. |1.99934| BD | 1| C 1 - H 5
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 5 s| 99.94%|p 0.00| 0.06%|
Поскольку похоже, что вы хотите удалить вторую новую строку из каждой группы из четырех строк, вышеприведенная команда paste
делает именно это.
$ awk '{printf "%s%s", (/^f/ ? "" : s), $0; s=ORS} END{print ""}' file
1. |1.99934| BD | 1| C 1 - H 2
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 2 s| 99.94%|p 0.00| 0.06%|
2. |1.99934| BD | 1| C 1 - H 3
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 3 s| 99.94%|p 0.00| 0.06%|
3. |1.99934| BD | 1| C 1 - H 4
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 4 s| 99.94%|p 0.00| 0.06%|
4. |1.99934| BD | 1| C 1 - H 5
| 60.12%| 0.7754* C 1 s| 24.99%|p 3.00| 74.95%|d 0.00| 0.05%|f 0.00| 0.01%|
| 39.88%| 0.6315* H 5 s| 99.94%|p 0.00| 0.06%|