如何使用空行条件合并不同行数的两个文件?

如何使用空行条件合并不同行数的两个文件?

我有两个文件,其中一个具有由空行分隔的不同部分,如下所示

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

out 所需的输出

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

$

相关内容