• ベストアンサー

diffコマンドにてテキスト出力

こんばんは。教えてください! 以下のような2つのファイルがあるとします。 ・aaa.txt abc111 abc222 abc333 ・bbb.txt abc333 abc444 これを比較して、比較結果をテキスト出力したいです。 テキスト出力したい比較結果は (1)重複しているもの全てテキスト出力 (2)aaa.txtのみにあるものをテキスト出力 (3)bbb.txtのみにあるものをテキスト出力 また、(1)~(3)は別々のファイルに出力したいです。 diffコマンドで、 diff a.txt b.txt >> c.txt とすると、 1つのテキストファイル(c.txt)に (1)~(3)すべてが書かれてしまいます。 環境は、windows XPにてCygwinを使用しています。 diffコマンドでなくても構いません。 宜しくお願いします。

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

  • ベストアンサー
回答No.2

このような場合はuniqコマンドを使うのがよいかと思います。 ======= aaa.txt abc111 abc222 abc333 abc444 ======= bbb.txt abc222 abc444 abc111 abc555 ======= のとき、 (1)重複しているもの sort aaa.txt bbb.txt | uniq -d > 111.txt (2)aaa.txtのみにあるもの sort 111.txt aaa.txt | uniq -u > 222.txt (3)bbb.txtのみにあるもの sort 111.txt bbb.txt | uniq -u > 333.txt でできます。 aaa.txt、bbb.txtのそれぞれの内容がユニークで無い場合(例えば、aaa.txtに「abc222」が複数含まれるなど)、あらかじめuniqにしておかなければなりませんが。

noname#68148
質問者

お礼

ありがとうございます! できました!!!! uniqでできるんですね。diffばかり頭にあって。。 aaa.txt、bbb.txtのそれぞれの内容はユニークで大丈夫です! コマンドをもっと勉強しなければならないと痛感しました。 ありがとうございました!

その他の回答 (1)

回答No.1

diff -y a.txt b.txt | grep "<" >onlya.txt diff -y a.txt b.txt | grep ">" >onlyb.txt diff -y a.txt b.txt | grep -v [\<\>] >both.txt *一応*これでできると思いますが。(both.txtは余計なもの入るかも)

noname#68148
質問者

お礼

ありがとうございます! 無事できました!!! のですが、たとえば ・a.txt abc111 abc222 abc333 abc444 ・b.txt abc222 abc444 abc111 のように、順番がばらばらの場合、うまく出来ませんでした。 そこで A=`sort a.txt` B=`sort b.txt` diff -y $A $B | grep "<" >onlya.txt diff -y $A $B | grep ">" >onlyb.txt diff -y $A $B | grep -v [\<\>] >both.txt として実行したところエラーが出てしまい、 onlya.txt、onlyb.txt、both.txt には何も入っていませんでした・・・。 エラー文は diff:extra operand `abc333' diff:Try `diff --help' for more information. diff:extra operand `abc333' diff:Try `diff --help' for more information. diff:extra operand `abc333' diff:Try `diff --help' for more information. です。。。 すみません。。 どなたかお願いいたします。

関連するQ&A