diff 출력에서 ​​올바른 줄 수를 얻으십시오.

diff 출력에서 ​​올바른 줄 수를 얻으십시오.

diff 출력에서 ​​올바른 줄 수를 얻고 싶습니다(특히 -y--suppress-common-lines옵션 사용). 간단한 wc -l방법을 사용하세요아니요두 파일이 줄 바꿈 없이 끝나고 마지막 줄이 다른 경우 wc -l마지막 줄이 계산되지 않기 때문에 작동합니다.

이를 방지할 수 있는 간단하고 효과적인 해결책이 있습니까?

예를 들어, "a" 파일이 있는 경우:

a
b
c
d   #no newline here

및 "b":

a
b
c
D    #no newline here

출력은 다음과 같습니다

$ diff -y --suppress-common-lines a b | wc -l
0

이는 명백히 잘못된 내용이므로diff 하다한 줄을 출력합니다.

답변1

개행 문자가 없으므로 wc -l정확합니다. 대신, 줄의 시작 수를 세고 싶습니다. 한 가지 방법은 다음과 같습니다.

$ diff -y --suppress-common-lines a b | grep '^' | wc -l
1

답변2

그것은 아무런 문제가 없습니다. 줄은 LF 문자로 끝나야 합니다. 그렇지 않으면 줄이 아닙니다(어쨌든 wc -l줄이 아닌 개행 횟수로 기록됩니다).

누락된 LF 문자를 다시 추가하는 항목으로 출력을 파이프할 수 있습니다. GNU 붙여넣기는 다음을 수행할 수 있습니다.

$ diff -y --suppress-common-lines <(printf a) <(printf b) | wc -l
0
$ diff -y --suppress-common-lines <(printf a) <(printf b) | paste | wc -l
1

다른 붙여넣기 구현에서는 작동하지 않을 수 있지만 GNU 특정 옵션을 사용하고 있으므로 GNU도 있다고 diff안전하게 가정할 수 있습니다 paste. POSIX는 종료되지 않는 줄에 대한 텍스트 유틸리티의 동작을 지정하지 않습니다.

답변3

매뉴얼과 정보 페이지에 명시된 대로 -l( ) 옵션은 개행 횟수를 인쇄하는 --lines데 사용되는 것 같습니다 . wc따라서 줄이 개행 문자로 끝나지 않으면 개수가 증가하지 않습니다.

관련 정보