Join コマンドが期待どおりに動作しません。

Join コマンドが期待どおりに動作しません。

行は異なりますが、共通の要素は1つの2つのファイルをリンクしようとします。

ファイル1:

1/temperature
2/rainfall
3/snowfall
4/windspeed
5/winddirection

ファイル2:

2008-10-01/1/68
2008-10-02/2/6
2008-10-03/3/4
2008-10-04/4/25
2008-10-05/5/120
2008-10-01/1/89
2008-10-01/4/35
2008-11-01/5/360
2008-10-01/1/45
2008-12-01/1/61
2008-10-10/1/32

次のコマンドを使用して2つのファイルを結合しようとしています。

join -t/ -1 1 -2 2 FILE1 FILE2

次のような結果が出ると予想されます。

1/temperature/2008-10-01/68
1/temperature/2008-10-01/89
1/temperature/2008-10-01/45
1/temperature/2008-12-01/61
1/temperature/2008-10-10/32
2/rainfall/2008-10-02/6
3/snowfall/2008-10-03/4
4/windspeed/2008-10-04/25
4/windspeed/2008-10-01/35
5/winddirection/2008-10-05/120
5/winddirection/2008-11-01/360

しかし、最初の5行は次のとおりです。

1/temperature/2008-10-01/68
2/rainfall/2008-10-02/6
3/snowfall/2008-10-03/4
4/windspeed/2008-10-04/25
5/winddirection/2008-10-05/120

助けてください私が何を間違っているのですか?

ベストアンサー1

join入力がソートされると予想します(結合するフィールドで)。この例では、(bashシェルのプロセス代替の使用):

$ join -t/ -1 1 -2 2 FILE1 <(sort -t/ -k2 FILE2)
1/temperature/2008-10-10/32
1/temperature/2008-10-01/45
1/temperature/2008-12-01/61
1/temperature/2008-10-01/68
1/temperature/2008-10-01/89
2/rainfall/2008-10-02/6
3/snowfall/2008-10-03/4
4/windspeed/2008-10-04/25
4/windspeed/2008-10-01/35
5/winddirection/2008-10-05/120
5/winddirection/2008-11-01/360

必須注文は次のとおりです。語彙数値の代わりに - 最初の列にFILE19つ以上の値がある場合は、事前ソートが必要になる場合があります。

おすすめ記事