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を印刷し、配列に値を追加します。