我想合并两个所需输出的文件。
文件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