commで各ファイルの行成分を確認する

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$ 

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA