このコマンドを使用して、2つのファイル間で変更された行数を計算してみました。
diff -U 0 file1 file2 | grep ^@ | wc -l
このコマンドの私の問題は、一方のファイルに1行しかなく、もう一方のファイルに100行がある場合でも、出力は1のままであるということです。
1つのファイルの余分な行の合計を含め、変更された行の合計数を指定するコマンドはどれですか?
@
で始まる行を探すと、diff
が見つけた変更のブロック数がわかります。多くの場合、複数の行になります。
たまたま、差分の統計をカウントするツールがあります:diffstat
( Webサイト 、 manページ )。
挿入と削除をカウントします。
$ diff -u test1 test2 | diffstat
test2 | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
同じブロック内の挿入と削除を組み合わせて、単一の「変更」操作を行います。
$ diff -u test1 test2 | diffstat -m
test2 | 2 -!
1 file changed, 1 deletion(-), 1 modification(!)
また、diffstat -t
を使用して、変更された行数だけの表形式の出力を取得することもできます。
テストファイル:
$ cat test1
a
b
c
d
$ cat test2
a
x
d