dポイントプレゼントキャンペーン実施中!

こんばんは。教えてください!

以下のような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コマンドでなくても構いません。
宜しくお願いします。

A 回答 (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にしておかなければなりませんが。
    • good
    • 2
この回答へのお礼

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

お礼日時:2006/11/03 13:27

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は余計なもの入るかも)
    • good
    • 0
この回答へのお礼

ありがとうございます!
無事できました!!!

のですが、たとえば
・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.
です。。。

すみません。。
どなたかお願いいたします。

お礼日時:2006/11/03 10:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!