2つのファイルが与えられた場合、行の変更の総数を見つける方法は?

2つのファイルが与えられた場合、行の変更の総数を見つける方法は?

このコマンドを使用して、2つのファイル間で変更された行数を数えようとします。

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

このコマンドの問題は、あるファイルに1行だけがあり、別のファイルに100行がある場合、出力はまだ1であることです。

ファイルの追加の追加行数など、変更された行の総数を知らせるコマンドは何ですか?

答え1

で始まる行を見つけると、@見つかった変更ブロックの数がわかりますdiff。通常、複数の行があります。

偶然にも、違いの統計を計算するためのツールがありますdiffstat:(ウェブサイトマニュアルページ)。

挿入と削除の回数:

$ 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

答え2

Cat <file1> <file2> | sort | uniq | wc -l

これは私にとって効果的です

関連情報