빈 줄 조건을 사용하여 줄 수가 다른 두 파일을 병합하는 방법은 무엇입니까?

빈 줄 조건을 사용하여 줄 수가 다른 두 파일을 병합하는 방법은 무엇입니까?

두 개의 파일이 있는데 그 중 하나는 아래와 같이 빈 줄로 구분된 서로 다른 섹션이 있습니다.

a11 a12 a13
b11 b12 b13
c11 c12 c13

a21 a22 a23
b21 b22 b23
c21 c22 c23
d21 d22 d23

a31 a32 a33
b31 b32 b33

두 번째 파일의 줄 수는 첫 번째 파일의 섹션 수와 같습니다.

x1 X2
y1 y2 
z1 z2

원하는 출력을 출력

a11 a12 a13 x1 x2
b11 b12 b13
c11 c12 c13

a21 a22 a23 y1 y2
b21 b22 b23
c21 c22 c23
d21 d22 d23

a31 a32 a33 z1 z2
b31 b32 b33 

시도했지만 paste file1 file2원하는 결과가 나오지 않았습니다.

답변1

$ awk 'NR==FNR{a[NR]=$0; next} {print $0 (pNF ? "" : OFS a[++c]); pNF=NF}' file2 file1
a11 a12 a13 x1 X2
b11 b12 b13
c11 c12 c13

a21 a22 a23 y1 y2
b21 b22 b23
c21 c22 c23
d21 d22 d23

a31 a32 a33 z1 z2
b31 b32 b33

답변2

awk의 범위 연산자를 사용하십시오.

$ awk '
  !B {a[NR]=$0;next}
  NF,!NF {
    if (!f++) $(NF+1) = a[++i]
    f = NF
  };1
' ./file2 B=1 ./file1

단락 모드에서 GNU awk 유틸리티를 사용하십시오.

$ awk '
    BEGIN {
      factory_setting = RS
      RS = ""
      paragrph_mode = RS
      OFS = FS = "\n"
      ORS = "\n\n"
      f2 = ARGV[2]
      ARGV[2] = ""
    }
    {
      RS = factory_setting
        if (getline t < f2 > 0) $1=$1" "t 
      RS = paragrph_mode
    }1
'  ./file1 ./file2
a11 a12 a13 x1 x2
b11 b12 b13
c11 c12 c13

a21 a22 a23 x2 y2
b21 b22 b23
c21 c22 c23
d21 d22 d23

a31 a32 a33 x3 y3
b31 b32 b33

$

관련 정보