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$



コメント