最初の列に従って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 Mからフィールド Nfile1と からフィールド Mを選択します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

関連情報