列と行数の異なる2つのファイルをリンクします。

列と行数の異なる2つのファイルをリンクします。

2つのファイルがあります。 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

file_2.txtは次のとおりです。

R4 C4 C5
R6 C4 C5
R7 C4 C5
R9 C4 C5

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

すべての値は数値です。 file_1.txtとfile_2.txtの最初の列は、数値が昇順にソートされたキーフィールドです。

これは一人だけ参加すればできることですか?

ベストアンサー1

この問題の一般的なアプリケーションは次のとおりです。

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     

出力フィールド区切り文字をタブで明示的に設定する必要があるかもしれません。この場合

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 

おすすめ記事