最初のフィールドに主キー値があり、残りのフィールドにその値を持つ2つのファイルがあります。一部の主キー値はあるファイルにはありませんが、他のファイルにはあり、その逆も同様です。
$ cat jointest1.txt jointest2.txt
a 1
b 2
d 4
e 5
a 10
b 11
c 12
d 13
出力では、欠落している値を置き換えたり変更したりすることなく、主キーに基づいてこれらのファイルをマージすると予想されます。たとえば、次のようになります。
$ joinmerge jointest1.txt jointest2.txt
a 1 10
b 2 11
c - 12
d 4 13
e 5 -
欠落している値をダッシュまたは他のものに置き換える機能はオプションです。
これを試しましたが、join
ファイルが正しくソートされていないと表示されます。
$ join jointest1.txt jointest2.txt
a 1 10
b 2 11
join: file 2 is not in sorted order
d 4 13
どのコマンドを使用する必要がありますか?
ベストアンサー1
以下を試してください。
> join -e- -a1 -a2 jointest1 -o 0 1.1 1.2 2.1 2.2 jointest2
a a 1 a 10
b b 2 b 11
c - - c 12
d d 4 d 13
e e 5 - -
または
> join -e- -a1 -a2 jointest1 -o 0 1.2 2.2 jointest2
a 1 10
b 2 11
c - 12
d 4 13
e 5 -
-oオプションなしで同じ目標を達成できるかどうかを理解する方法がわかりません。 -oオプションは、接続フィールドを最初に印刷してからフィールド番号を印刷することを意味します。ファイル1の2、ファイル2のフィールド2