- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:linuxのjoinコマンドがうまくいきません。)
【解決方法】linuxのjoinコマンドで共通の行が結合されない原因と対策
このQ&Aのポイント
- linuxのjoinコマンドで共通の行が結合されない原因を解説します。原因はソートされていないファイルや、区切り文字の違いなどがあります。対策としては、ファイルをソートすることや、フィールドの指定を行うことが挙げられます。
- 具体的な解決方法としては、joinコマンドを実行する前に、ソートコマンドでファイルをソートすることが重要です。また、フィールドの指定も行う必要があります。さらに、ファイルの区切り文字が異なる場合には、-tオプションを使用して区切り文字を指定することも有効です。
- 環境はLubuntu14.04lts-64bit、join (GNU coreutils) 8.21です。joinコマンドのバージョンによっては、挙動が異なる場合があるので、バージョンの確認も忘れずに行いましょう。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
joinはソートしたデータを使わないとうまくいかないです。 bashだと $ join <(sort aaa.txt) <(sort bbb.txt) で 順番は変わってしまいますが、うまくできるはずです。
その他の回答 (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) これらにより、入力が「正しくソートされていない」と判断されています。 対策は、入力を正しくソートすることです。
質問者
お礼
いろいろと情報をご提供いただきありがとうございます。 ソートしておく必要があることがわかりました。
お礼
ありがとうございます。 ソートしておく必要があるのですね。 確かにうまくいきました。