• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:linuxのjoinコマンドがうまくいきません。)

【解決方法】linuxのjoinコマンドで共通の行が結合されない原因と対策

このQ&Aのポイント
  • linuxのjoinコマンドで共通の行が結合されない原因を解説します。原因はソートされていないファイルや、区切り文字の違いなどがあります。対策としては、ファイルをソートすることや、フィールドの指定を行うことが挙げられます。
  • 具体的な解決方法としては、joinコマンドを実行する前に、ソートコマンドでファイルをソートすることが重要です。また、フィールドの指定も行う必要があります。さらに、ファイルの区切り文字が異なる場合には、-tオプションを使用して区切り文字を指定することも有効です。
  • 環境はLubuntu14.04lts-64bit、join (GNU coreutils) 8.21です。joinコマンドのバージョンによっては、挙動が異なる場合があるので、バージョンの確認も忘れずに行いましょう。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

joinはソートしたデータを使わないとうまくいかないです。 bashだと $ join <(sort aaa.txt) <(sort bbb.txt) で 順番は変わってしまいますが、うまくできるはずです。

passo2006
質問者

お礼

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

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

http://www.gnu.org/software/coreutils/manual/coreutils.html#join-invocation http://linuxjm.sourceforge.jp/info/GNU_coreutils/coreutils-ja_54.html あたりには「ソート済みでなければならない」と明記されています。 その並び順は「LC_COLLATEで想定されるもの」とあります。 この表現ではちょっとわかりずらいですが、 http://linuxjm.sourceforge.jp/html/gnumaniak/man1/join.1.html 以前の版には「昇順」と明記されています。 また「数値順ではない」とも明記されています。 よって 2014年4月10日 < 2014年4月9日 です。(先頭から比較して、違いがある文字の大小関係→ 1と9で1<9) これらにより、入力が「正しくソートされていない」と判断されています。 対策は、入力を正しくソートすることです。

passo2006
質問者

お礼

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

関連するQ&A