如何根据第一列值对齐3个文件

Mik*_*ail 5 linux sorting bash file

我有3个文本文件c.dat,n.dat并且h.dat 内容类似,采用这种格式

c.dat    n.dat    h.dat
1 0.ccc  3 1.nnn  1 2.hhh
2 0.ccc  4 1.nnn  2 2.hhh
4 0.ccc  5 1.nnn  5 2.hhh
Run Code Online (Sandbox Code Playgroud)

期望的输出:

1 0.ccc Inf 2.hhh
2 0.ccc Inf 2.hhh
3 Inf 1.nnn Inf
4 0.ccc 1.nnn Inf
5 Inf 1.nnn 2.hhh
6 Inf Inf Inf
7 ....
Run Code Online (Sandbox Code Playgroud)

每个文件有大约100行,但它们并不总是从1开始,并且不总是连续的.

我需要通过第一列对齐3个文件,这样如果其他文件没有它,它就会填充NA,NaN或Inf ......等等.

谢谢!

Sie*_*geX 4

awk '
{
        if(FNR==1){f++}
        a[$1,f] = $2
        if($1 > max){max = $1}
}

END{
        for(j=1;j<=max;j++){
          printf("%d\t", j)
          for(i=1;i<=f;i++){
            if(!a[j,i]){printf("Inf\t")}
            else{printf("%s\t", a[j,i])}
          }
          printf("\n")
        }
}' ./c.dat ./n.dat ./h.dat
Run Code Online (Sandbox Code Playgroud)

输出

$ ./awk.dat
1       0.ccc   Inf     2.hhh
2       0.ccc   Inf     2.hhh
3       Inf     1.nnn   Inf
4       0.ccc   1.nnn   Inf
5       Inf     1.nnn   2.hhh
Run Code Online (Sandbox Code Playgroud)