• ベストアンサー

shell diff の使い方について

shellで差分をとりたいとおもっているのですが・・・ aaa.txtの中身 ※1 aaaaaa_xxx.c ※2 bbbbbb_yyy.c . . . bbb.txtの中身 ※1 aaaaaa.c ※2 bbbbbb.c . . . aaa.txt、bbb.txtそれぞれに200近くのファイル名のみが入っています。 両方のテキストファイルを読み込み、それぞれの※1と※1、※2と※2というふうに 差分を見ていきたいと思っています。行はすべてバラバラです。 差分を見たい対象になる基準は・・・ 例えば、※1であればaaaaaaの部分が同じなので。 (ディレクトリもそれぞれファイルごとにばらばらです) ついでに差分の行数も出力したいと考えています。 なにか良い方法を教えていただけませんでしょうか? shellでつくりたいと思っています。 どうかよろしくお願いいたします。

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

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

例を1つだけ説明されてもしょうがないです。すべての場合について言える条件を書かないと、プログラムは作れません。 「バスを除いたファイル名が同じファイル同士を、一対多かもしれないが比較したい」ということだとすると、 while read a do af=`basename $a` grep /$af\$ bbb.txt | while read b do echo === compare $a with $b === diff 適当なオプション $a $b done done < aaa.txt >ついでに差分の行数も出力したいと考えています。 「差分の行数」の定義をしないと、何をして良いのか分かりません。 diff の出力の行数でいいなら、 echo === diff output is `diff オプション $a $b` lines === とかですが。

usamaru12
質問者

お礼

ありがとうございます。 教えて頂いた方法で若干生まれそうな気がしているのですが・・・ なかなか四苦八苦しています・・・ すみません、超初心者&質問がうまく伝えられずに もう一度自分で整理してからまた質問させて頂きます。

その他の回答 (2)

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

与えられるファイルの中身も明確じゃないし, 「ファイル名の一部が一致している」という条件も曖昧なので, 「できるか」と聞かれても困る. 以下の例はどう判断します? aaaaaa.c と bbbbbb.c (最後の「.c」が一致) first_file.c と second_file.c (同じく最後の「_file.c」が一致) a_file.c と another_file.c (最初の「a_ 」と最後の「_file.c」が一致) aaaaaa_this.c と aaaaaa_that.c (最初の「aaaaaa_th」と最後の「.c」が一致) 例えば 「最初のファイルは aaaaaa.c (こちらには『_』は含まれない), 次のファイルは (それに対応して) aaaaaa_some.c のように『最初のファイルにある (かもしれない) ファイル名の拡張子を除いたところ』+ _なんちゃら + 『最初のファイルにある (かもしれない) ファイル名の拡張子』が入っている」ということがわかれば, それだけでも手掛かりになる (sed とか diff などを駆使すればできるような気がする) んだけどね.

usamaru12
質問者

お礼

すみません、自分のなかでまだ整理ができていないうちに 質問をしてしまいました。 きちんと整理をしてからまた質問させて頂きます。

usamaru12
質問者

補足

ありがとうございます。 sedを使って、aaa.txtとbbb.txtの中身ファイル名を揃えるところまではできました! txtファイルの中身は1行ごとにファイルパスから書いてあります。 【aaa.txtの中身】 a/b/c/aaa.c ※1 a/b2/c2/bbb.c . . . 【bbb.txtの中身】 aa/bb/cc/aaa.c   ※2 aa1/bb1/cc1/aaa.c  ※3 . . . diffをとる対象となるファイルごとにデイレクトリ階層が違います。 この場合だと ※1と※2のdiff ※1と※3のdiff をそれぞれtxtファイルに出力したいです。 質問が分かりづらく、何度も申し訳ございません。

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

え~と.... ごめん, 「どのように比較したいのか」が全く想像できない. 「差分を見たい対象になる基準は・・・ 例えば、※1であればaaaaaaの部分が同じなので。」 「同じなので」何だというのでしょうか. なんとなく sed とか paste とかを駆使すればいいのかもしれんけど. 一時ファイルは必要かもしれんし不要かもしれん. あそうそう, どこまでのコマンドが使えるんでしょうか? Perl が使えればなんでもありなので.

usamaru12
質問者

補足

ありがとうございます! >「差分を見たい対象になる基準は・・・ >例えば、※1であればaaaaaaの部分が同じなので。」 >「同じなので」何だというのでしょうか. diffをとる対象を探す基準がファイル名の一部が一致している…という意味で…。 差分をtxtファイルに出力していきたいと思っています。 perlは使えないです…。。 すみません…。

関連するQ&A

専門家に質問してみよう