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
따라서 줄이 개행 문자로 끝나지 않으면 개수가 증가하지 않습니다.