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スキルは限られています。
P.S.わかりやすくするために、これは結果のファイルをどのように見せたいかです(空白の代わりに他の記号を使用して欠落を示すことができます)。
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
awk
を使えばとても簡単です:
awk 'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}' file2 file1
最初に(file2が読み取られているとき)、file2の2番目の列を格納する配列a
を作成し、最初の列でインデックスを付けます。次に、配列から値を追加するfile1を出力します。
join
を使用します:
join -j 1 -a 1 <(sort file1) <(sort file2)
-j 1
:結合フィールドが最初のフィールドです-a 1
:ファイル1からペアリングできない行を出力しますsort
:ファイルは結合のためにソートする必要があります