Excel에서 파일을 열기 전에 형식을 지정하려는 출력은 다음과 같습니다.
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%|
출력이 다음과 같도록 "f"로 시작하는 줄을 이전 줄에 추가하는 방법을 원합니다.
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%|
SED를 사용하여 이 작업을 수행하려는 시도는 실패했습니다! 돕다! !
답변1
사용 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
An은 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%|
노트:sed
f
캡처 그룹에서 검색을 정규식으로 바꾸고 \n([a-z])
캡처된 문자를 다시 삽입 하면 \1
기본적으로 주석에 있는 @steeldriver의 응답과 동일합니다.
나는 그것이 awk
더 읽기 쉽다고 생각합니다.
답변3
앞:
printf '%s\n' g/^f/-1j wq | ex file
이것은 전역 명령을 사용하여 oin으로 시작하는 모든 줄에서 oin을 실행합니다 g
. Join은 단지 연결선일 뿐입니다.-1j
f
답변4
$ 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%|