合并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

相关内容