commは2ファイルの各行を比較して、一致と不一致を振り分けてくれる便利なコマンドですが、
各ファイルがソートされていることが前提です。
takk@deb8:~$ seq 10 >a;seq 2 13 >b takk@deb8:~$ comm a b 1 2 3 4 5 6 7 8 9 comm: ファイル 1 がソートされていません comm: ファイル 2 がソートされていません 10 11 12 13 takk@deb8:~$
しかし、上の例のように、文字列順にソートされていないだけで、数字順にソートされている場合は、既にソートされているので、commを処理するのになんら問題もありません。
チェックを無視するオプションを指定して実行します。
takk@deb8:~$ comm --nocheck-order a b 1 2 3 4 5 6 7 8 9 10 11 12 13 takk@deb8:~$
では、応用してみます。以前作ったsvnレポジトリにちょうどよい差分ファイルがあるので使ってみます。
takk@deb8:~/a/work$ md5sum * | sort > ../aa takk@deb8:~/a/work$ svn update -r3 Updating '.': U func_09.c U func_01.c U func_02.c U func_04.c U func_07.c リビジョン 3 に更新しました。 takk@deb8:~/a/work$ md5sum * | sort > ../bb takk@deb8:~/a/work$
一番右の列がr3とHEAD一致するファイル。中央列がr3で修正されているファイルです。
takk@deb8:~/a/work$ comm ../aa ../bb | perl -pe 's/\w{32}//' | expand -t16 func_08.c func_01.c func_03.c func_04.c func_01.c func_07.c func_07.c func_09.c func_06.c main.c func_04.c func_09.c func_00.c proto.h func_02.c func_05.c func_02.c takk@deb8:~/a/work$
コメント