web-dev-qa-db-ja.com

2つのファイルがある場合、行の変更の総数を見つけるにはどうすればよいですか?

このコマンドを使用して、2つのファイル間で変更された行数を計算してみました。

diff -U 0 file1 file2 | grep ^@ | wc -l

このコマンドの私の問題は、一方のファイルに1行しかなく、もう一方のファイルに100行がある場合でも、出力は1のままであるということです。

1つのファイルの余分な行の合計を含め、変更された行の合計数を指定するコマンドはどれですか?

@で始まる行を探すと、diffが見つけた変更のブロック数がわかります。多くの場合、複数の行になります。

たまたま、差分の統計をカウントするツールがあります:diffstatWebサイト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
5
ilkkachu