- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UNIXコマンドのjoinについて)
UNIXコマンドjoinの使用に関する質問
このQ&Aのポイント
- UNIXコマンドjoinを使用して2つのファイルを結合しようとしていますが、一列目の数字が急に変化するとそれ以降の行が出力されません。
- どのようにすればこの問題を防ぐことができるのでしょうか?
- もしくは、2つのファイルの一列目の数字が同じ場合に結合して出力してくれるプログラムを書ける方がいたら教えていただきたいです。perlかC++でお願いします。
- みんなの回答 (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後に数値でソート
その他の回答 (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
質問者
お礼
awkは使ったことがありませんでしたが、この際に勉強して使えるようになりたいと思います。 実際にこれを動かしてみると、計算が終わらないのですが… もう少し勉強していろいろいじってみます。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
何を期待しているかわからないんだけど -a とか?
お礼
回答ありがとうございます。 文字順でソートしなければならなかったんですね… 文字順でソートし直したらしっかりとできました! ありがとうございました。