수직으로 정렬된 파일 2개 병합

수직으로 정렬된 파일 2개 병합

두 파일을 원하는 출력으로 병합하고 싶습니다.

파일 1의 예는 다음과 같습니다.

LOCATION 0 X 0
VALUE 1 2 3
VALUE 1 2 3
VALUE 1 2 3
LOCATION 1 X 0
VALUE 1 2 3
VALUE 1 2 3
VALUE 1 2 3
LOCATION 2 X 0
VALUE 1 2 3
VALUE 1 2 3
VALUE 1 2 3

파일 2의 예는 다음과 같습니다.

LOCATION 0 X 0
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
LOCATION 1 X 0
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
LOCATION 2 X 0
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6

원하는 출력은 다음과 같습니다.

LOCATION 0 X 0
VALUE 1 2 3
VALUE 1 2 3
VALUE 1 2 3
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
LOCATION 1 X 0
VALUE 1 2 3
VALUE 1 2 3
VALUE 1 2 3
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
LOCATION 2 X 0
VALUE 1 2 3
VALUE 1 2 3
VALUE 1 2 3
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6
VALUE 4 5 6

보시다시피 유일한 공통점은 "LOCATION *"입니다. 이를 기준으로 행을 수직으로 정렬해야 합니다.

답변1

GNU awk를 사용하면 테스트에서 다음 작업이 수행됩니다.

awk 'BEGIN{RS="LOCATION [0-9] X [0-9]"}NR==FNR{f1[RT]=$0;next} \
RT in f1{printf("%s%s%s", f1[RT],gensub("\n","",1,$0),RT)}' file1 file2

시험:

$ cat file1
LOCATION 0 X 0
VALUE 1a 2 3
VALUE 1b 2 3
VALUE 1c 2 3
LOCATION 1 X 0
VALUE 1d 2 3
VALUE 1e 2 3
VALUE 1f 2 3
LOCATION 2 X 0
VALUE 1g 2 3
VALUE 1h 2 3
VALUE 1i 2 3

$ cat file2
LOCATION 0 X 0
VALUE 4a 5 6
VALUE 4b 5 6
VALUE 4c 5 6
VALUE 4d 5 6
LOCATION 1 X 0
VALUE 4e 5 6
VALUE 4f 5 6
VALUE 4g 5 6
VALUE 4h 5 6
LOCATION 2 X 0
VALUE 4i 5 6
VALUE 4j 5 6
VALUE 4k 5 6
VALUE 4l 5 6

$ awk 'BEGIN{RS="LOCATION [0-9] X [0-9]"}NR==FNR{f1[RT]=$0;next}RT in f1{printf("%s%s%s", f1[RT],gensub("\n","",1,$0),RT)}' file1 file2
LOCATION 0 X 0
VALUE 1a 2 3
VALUE 1b 2 3
VALUE 1c 2 3
VALUE 4a 5 6
VALUE 4b 5 6
VALUE 4c 5 6
VALUE 4d 5 6
LOCATION 1 X 0
VALUE 1d 2 3
VALUE 1e 2 3
VALUE 1f 2 3
VALUE 4e 5 6
VALUE 4f 5 6
VALUE 4g 5 6
VALUE 4h 5 6
LOCATION 2 X 0
VALUE 1g 2 3
VALUE 1h 2 3
VALUE 1i 2 3
VALUE 4i 5 6
VALUE 4j 5 6
VALUE 4k 5 6
VALUE 4l 5 6

관련 정보