Нужен скрипт или команда для добавления к предыдущей строке текущей строки, начинающейся с буквы нижнего регистра

tr -s '[:blank:]' '\n' < file

или

awk 'BEGIN{RS="[ \t\n]+"} 1' file
0
31.08.2020, 15:21
4 ответа

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более читаемым.

1
18.03.2021, 23:09

В экс:

printf '%s\n' g/^f/-1j wq | ex file

При этом используется общая команда gдля запуска -1join для всех строк, начинающихся с f. Join просто соединяет строки.

1
18.03.2021, 23:09

Использование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делает именно это.

2
18.03.2021, 23:09
$ 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%|
0
18.03.2021, 23:09

Теги

Похожие вопросы