• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UNIXコマンドのjoinについて)

UNIXコマンドjoinの使用に関する質問

このQ&Aのポイント
  • UNIXコマンドjoinを使用して2つのファイルを結合しようとしていますが、一列目の数字が急に変化するとそれ以降の行が出力されません。
  • どのようにすればこの問題を防ぐことができるのでしょうか?
  • もしくは、2つのファイルの一列目の数字が同じ場合に結合して出力してくれるプログラムを書ける方がいたら教えていただきたいです。perlかC++でお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

joinは、両方のファイルをそれぞれjoinするフィールドでソートしておかないといけませんが、されてないのでは? 数値としてのソートじゃ無くて、文字のソートなので、1 → 10 → 100 → 11 → 12 → 2 → 20 などという順です。 sort file1 > file1.tmp sort file2 > file2.tmp join file1.tmp file2.tmp | sort -n と、一旦文字順でソートして、join後に数値でソート

kjng
質問者

お礼

回答ありがとうございます。 文字順でソートしなければならなかったんですね… 文字順でソートし直したらしっかりとできました! ありがとうございました。

その他の回答 (2)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

なるほど、ずれたり急に桁上りすると妙な挙動しますね。 欲しい動作はこんな感じでいいのかな? awk '{while($1>a[1]){getline x<"j1.txt"; split(x,a);} if($1==a[1])print $0,a[2],a[3]}' j2.txt

kjng
質問者

お礼

awkは使ったことがありませんでしたが、この際に勉強して使えるようになりたいと思います。 実際にこれを動かしてみると、計算が終わらないのですが… もう少し勉強していろいろいじってみます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

何を期待しているかわからないんだけど -a とか?

専門家に質問してみよう