2番目の列の一致に基づいて列を追加する

2番目の列の一致に基づいて列を追加する

2つのファイルがあります。最初のファイルの形式は次のとおりです。

10D0325 2465 0 0 -9 -9
10D0598 2567 0 0 -9 -9
10D0562 2673 0 0 -9 -9
10D0175 2457 0 0 -9 -9
10D0241 2209 0 0 -9 -9
10D0954 2312 0 0 -9 -9
10D0446 2489 0 0 -9 -9

2番目のファイルの形式は次のとおりです。

10D0325 1
10D0598 1
10D0175 2
10D0954 1
10D0446 2

私が望むのは、ID変数に基づいて2番目のファイルの2番目の列を最初のファイルに追加することです。ご覧のとおり、最初の列は、最初のデータセットを2番目のデータセットと一致させる識別子変数として使用できます。ただし、最初のファイルには、2番目のファイルにないいくつかの行/ IDが含まれています。したがって、単に両方のファイルを注文し、この列を最初のファイルに貼り付けることはできません。

これを行うには非常に簡単な方法があります。残念ながら、私のLinux技術は限られています。

PSを明確にするために生成されたファイルの外観は次のとおりです(スペースの代わりに欠落を示すために他のシンボルを使用できます)。

10D0325 2465 0 0 -9 -9 1
10D0598 2567 0 0 -9 -9 1
10D0562 2673 0 0 -9 -9
10D0175 2457 0 0 -9 -9 2
10D0241 2209 0 0 -9 -9
10D0954 2312 0 0 -9 -9 1
10D0446 2489 0 0 -9 -9 2

答え1

使用join:

join -j 1 -a 1 <(sort file1) <(sort file2)
  • -j 1: 接続フィールドが最初です。
  • -a 1:ファイル1でペアリングできない行を印刷します。
  • sort:ファイルを追加する前にソートする必要があります。

答え2

それは簡単ですawk

awk 'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}' file2 file1

a最初に(file2を読み取るとき)、最初の列にインデックス付けされたfile2の2番目の列を格納するための配列を作成します。次に、file1を印刷し、配列に値を追加します。

関連情報