连接具有不同列数和行数的两个文件

Dav*_*ave 2 scripting text-processing join

我有两个文件。file_1.txt 看起来像这样:

R1     C1     C2     C3     C4     C5
R2     C1     C2     C3     C4     C5
R3     C1     C2     C3     C4     C5
R4     C1     C2     C3     C4     C5
R5     C1     C2     C3     C4     C5
R6     C1     C2     C3     C4     C5
R7     C1     C2     C3     C4     C5
R8     C1     C2     C3     C4     C5
R9     C1     C2     C3     C4     C5
R10    C1     C2     C3     C4     C5
Run Code Online (Sandbox Code Playgroud)

file_2.txt 看起来像这样:

R4 C4 C5
R6 C4 C5
R7 C4 C5
R9 C4 C5
Run Code Online (Sandbox Code Playgroud)

我想将 file_1.txt 中的 C4 和 C5 值替换为 file_2.txt 中与它们对应的值,同时保持 file_1.txt 中的 C1、C2 和 C3 值不变。

因此生成的 file_3.txt 应如下所示:

R1     C1     C2     C3     C4     C5
R2     C1     C2     C3     C4     C5
R3     C1     C2     C3     C4     C5
R4     C1     C2     C3     C4_new C5_new
R5     C1     C2     C3     C4     C5
R6     C1     C2     C3     C4_new C5_new
R7     C1     C2     C3     C4_new C5_new
R8     C1     C2     C3     C4     C5
R9     C1     C2     C3     C4_new C5_new
R10    C1     C2     C3     C4     C5
Run Code Online (Sandbox Code Playgroud)

所有值都是数字。file_1.txt 和 file_2.txt 中的第一列是关键字段,按数字升序排列。

这是单独加入可以做的事情吗?

iru*_*var 5

这个问题使得一个典型应用

awk 'NR == FNR{a1[$1]=$2; a2[$1]=$3; next};
    $1 in a1{$5=a1[$1]; $6=a2[$1]};{print}' file_2.txt file_1.txt     
Run Code Online (Sandbox Code Playgroud)

您可能必须将输出字段分隔符显式设置为制表符,在这种情况下

awk -v OFS='\t' 'NR == FNR{a1[$1]=$2; a2[$1]=$3; next};
    $1 in a1{$5=a1[$1]; $6=a2[$1]};{print}' file_2.txt file_1.txt 
Run Code Online (Sandbox Code Playgroud)