Я хочу объединить два файла с желаемым результатом.
Пример файла 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 * ", по которому строки должны быть отсортированы по вертикали.
С 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