dポイントプレゼントキャンペーン実施中!

$ cat aaa.txt
2014年4月30日 11440
2014年4月28日 11438
2014年4月27日 11437
2014年4月26日 11436
2014年4月25日 11435
2014年4月24日 11434
2014年4月23日 11433
2014年4月22日 11432
2014年4月21日 11431
2014年4月20日 11430
2014年4月19日 11429
2014年4月18日 11428
2014年4月17日 11427
2014年4月16日 11426
2014年4月15日 11425
2014年4月14日 11424
2014年4月13日 11423
2014年4月12日 11422
2014年4月11日 11421
2014年4月10日 11420
2014年4月9日 11419

$ cat bbb.txt
2014年4月30日 264
2014年4月28日 265
2014年4月25日 265
2014年4月24日 264
2014年4月23日 263
2014年4月22日 262
2014年4月21日 263
2014年4月18日 263
2014年4月17日 261
2014年4月16日 261
2014年4月15日 259
2014年4月14日 256
2014年4月11日 256
2014年4月10日 258
2014年4月9日 256

$ join aaa.txt bbb.txt
2014年4月30日 11440 264
2014年4月28日 11438 265
join: bbb.txt:5: is not sorted: 2014年4月23日 263
join: aaa.txt:4: is not sorted: 2014年4月26日 11436
2014年4月9日 11419 256

$
となり、2014年4月25日など共通の行がjoinされません。
原因と対策をご教示いただけますでしょうか。
環境はLubuntu14.04lts-64bit、join (GNU coreutils) 8.21です。
よろしくおねがいします。

A 回答 (2件)

joinはソートしたデータを使わないとうまくいかないです。



bashだと
$ join <(sort aaa.txt) <(sort bbb.txt)

順番は変わってしまいますが、うまくできるはずです。
    • good
    • 1
この回答へのお礼

ありがとうございます。
ソートしておく必要があるのですね。
確かにうまくいきました。

お礼日時:2014/05/11 12:24

http://www.gnu.org/software/coreutils/manual/cor …
http://linuxjm.sourceforge.jp/info/GNU_coreutils …
あたりには「ソート済みでなければならない」と明記されています。

その並び順は「LC_COLLATEで想定されるもの」とあります。
この表現ではちょっとわかりずらいですが、
http://linuxjm.sourceforge.jp/html/gnumaniak/man …
以前の版には「昇順」と明記されています。

また「数値順ではない」とも明記されています。
よって
2014年4月10日 < 2014年4月9日
です。(先頭から比較して、違いがある文字の大小関係→ 1と9で1<9)

これらにより、入力が「正しくソートされていない」と判断されています。
対策は、入力を正しくソートすることです。
    • good
    • 0
この回答へのお礼

いろいろと情報をご提供いただきありがとうございます。
ソートしておく必要があることがわかりました。

お礼日時:2014/05/11 12:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!