ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:usamaru12 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でつくりたいと思っています。
どうかよろしくお願いいたします。
質問投稿日時:08/04/07 23:13
質問番号:3930892
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:notnot 例を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 ===
とかですが。
種類:回答
どんな人:一般人
自信:自信あり
回答日時:08/04/08 21:38
回答番号:No.3
この回答へのお礼ありがとうございます。
教えて頂いた方法で若干生まれそうな気がしているのですが・・・
なかなか四苦八苦しています・・・
すみません、超初心者&質問がうまく伝えられずに
もう一度自分で整理してからまた質問させて頂きます。

回答

良回答10pt

回答者:Tacosan 与えられるファイルの中身も明確じゃないし, 「ファイル名の一部が一致している」という条件も曖昧なので, 「できるか」と聞かれても困る.
以下の例はどう判断します?
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 などを駆使すればできるような気がする) んだけどね.
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/04/08 14:47
回答番号:No.2
この回答への補足ありがとうございます。
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 え〜と....
ごめん, 「どのように比較したいのか」が全く想像できない.
「差分を見たい対象になる基準は・・・
例えば、※1であればaaaaaaの部分が同じなので。」
「同じなので」何だというのでしょうか.
なんとなく sed とか paste とかを駆使すればいいのかもしれんけど. 一時ファイルは必要かもしれんし不要かもしれん.
あそうそう, どこまでのコマンドが使えるんでしょうか? Perl が使えればなんでもありなので.
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/04/08 00:30
回答番号:No.1
この回答への補足ありがとうございます!
>「差分を見たい対象になる基準は・・・
>例えば、※1であればaaaaaaの部分が同じなので。」
>「同じなので」何だというのでしょうか.
diffをとる対象を探す基準がファイル名の一部が一致している…という意味で…。

差分をtxtファイルに出力していきたいと思っています。

perlは使えないです…。。
すみません…。
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示良回答のみ表示