- ベストアンサー
CentOS7のjoinコマンドでファイルを結合する方法
- CentOS7のjoinコマンドを使用して2つのファイルを結合する方法を教えてください。
- ファイル1にあるレコードのカラム2とカラム3の値は、ファイル2のレコードでカラム1が一致する場合に対応するカラム2とカラム3の値を引用したいです。
- ただし、ファイル1にしかないレコードのカラム2とカラム3は固定文字"0 PASSWORD0"を表示するようにしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>CentOS7のjoinコマンドで・・・ CentOS7に限らずLinuxのjoinコマンドでは出力フィールドに-eオプションの対象フィールドが複数(今回は2つ)あるとそのようになってしまいます。 したがって、デリミッタをspaceではなくて、例えばカンマ区切りとして、 ”0 PASSWORD0" を1文字列として扱えば可能です。(デミリッタを指定しないと space がデリミッタとみなされますので1 password1 や 2 password2 は2文字列となってしまいます。) つまり、<File2>は ta**@yahoo.jp, 1 password1 hana**@yahoo.jp, 2 password2 のようにカンマ区切りとして -t, でカンマ区切りを指定して $ join -t, -1 1 -o 0 2.2 -a 1 -e "0 PASSWORD0" <(sort File1) <(sort File2) のようにしてはどうでしょうか。 結果は ji**@yahoo.jp, 0 PASSWORD0 hana**@yahoo.jp, 2 password2 ta**@yahoo.jp, 1 password1 のようになります。 どうしても結果のカンマをspaceにしたければ、別のコマンドでspaceに置き換えればいいでしょう。
その他の回答 (1)
- kteds
- ベストアンサー率42% (1882/4440)
No.1です。 OKWaveの担当者が質問文、回答文の一部の文字を勝手に書き換えたようです。
お礼
私の質問は「実際に存在するかも知れないメールアドレスについて、マスキングいただいただけで、むしろ私が投稿する時に気付くべきでした。 それとNo.1のお礼で書いた「スペースとカンマを入れ替える」と言うのは無理ですね。 どうせsortを使ってますので、 $ join -j 1 -o 0,2.2,2.3 -a 1 -e EMPTY <(sort File1) <(sort File2) | sed 's/EMPTY EMPTY/0 PASSWORD0/' とsedで逃げることにしました。
お礼
〉 -eオプションの対象フィールドが複数あるとその様になってしまいます。 矢張りそうだったんですね、そうなのかなと思って翻訳サイトに手伝ってもらいながら 'coreutils@gnu.org' に仕様確認したところです。 いただいたご回答はなるほどですね。 入力ファイルのフォーマットは変更できないので、応用させていただき、-tのパラメータを"0,PASSWORD0"でやってみます。.を後でスペースに変更します。 大変助かりました。ありがとうございました。