最初の列に基づいて2つのファイルの共通値を置き換えます。

最初の列に基づいて2つのファイルの共通値を置き換えます。

最初の列に基づいて2つのファイルの共通値を置き換える方法は?

ファイル1(1.txt)があります。

CH063_01084
CH063_01083
CH063_13925
CH063_14473

ファイル2(2.txt):

CH063_01083         FGSG_16349  4
CH063_14473         FGSG_16350  5

出力ファイルは次のようにする必要があります。

CH063_01084
CH063_01083          FGSG_16349 4
CH063_13925
CH063_14473          FGSG_16350 5

答え1

あなたはそれを使用することができますjoinそのために:

join -a 1 file1 file2

join共通フィールドに基づいてファイルを結合します。デフォルトでは、これは両方のファイルの最初のフィールドです。-a 1ペアリングがない場合は、最初のファイルの行が含まれることを示します。最初のフィールド以外のフィールドを選択するには、-1 N -2 MN fromfile1およびM from選択フィールドを使用しますfile2

答え2

あなたはそれを使用することができますjoin

$ join -a 1 file1.txt file2.txt 
A
B asas 4
C
D addd 5

ファイルがソートされていない場合:

join -a 1 <(sort 1.txt) <(sort 2.txt)

ただし、これによりフォーマットが失われます。あなたはそれを使用することができますperl

$ perl -anle ' $h{$F[0]} = $_;
    END { print for sort values %h }
' file1.txt file2.txt

関連情報