두 파일 간의 비트 비교 [닫기]

두 파일 간의 비트 비교 [닫기]

저는 bash를 배우고 있는데 거의 동일한 두 개의 텍스트 파일(몇 비트만 반전됨)을 비교하고 동일한 수의 비트를 출력해야 합니다. 즉, 문자가 아닌 비트를 비교해야 합니다. Bash 문서를 읽는 동안 및 명령을 발견했지만 comm파일 diff을 비트 단위가 아닌 한 줄씩 비교하는 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

cmp비트가 아니라 바이트를 의미한다고 가정하면 (from ) 을 사용할 수 있습니다 man cmp.

이름

cmp - 두 파일을 바이트 단위로 비교합니다.

다음 두 파일을 예로 들어 보겠습니다.

$ cat file1
The quick brown fox jumped over the lazy dog.

$ cat file2
The quick flown fax jumped over the hazy log.

넌 할 수있어:

$ cmp -lb file1 file2
11 142 b    146 f
12 162 r    154 l
18 157 o    141 a
37 154 l    150 h
42 144 d    154 l

fold또는 다음을 사용하여 한 줄에 1바이트를 인쇄 할 수 있습니다 diff.

$ diff <(fold -b1 file1) <(fold -b1 file2)
11,12c11,12
< b
< r
---
> f
> l
18c18
< o
---
> a
37c37
< l
---
> h
42c42
< d
---
> l

답변2

예시 파일:

$ cat tmp1 tmp2
unix and linux
uniq and lynux

당신은 그것을 사용할 수 있습니다xxd다음과 같이 diff:

$ diff <(xxd -c1 tmp1) <(xxd -c1 tmp2)
4c4
< 00000003: 78  x
---
> 00000003: 71  q
11c11
< 0000000a: 69  i
---
> 0000000a: 79  y

선택적 -b확인조금:

$ diff <(xxd -c1 -b tmp1) <(xxd -c1 -b tmp2)
4c4
< 00000003: 01111000  x
---
> 00000003: 01110001  q
11c11
< 0000000a: 01101001  i
---
> 0000000a: 01111001  y

답변3

perl -lne 'BEGIN{$/=\8192}; print for split "", unpack("b*", $_)'파일의 각 비트(각 바이트의 최하위 비트로 시작)는 한 줄에 하나씩 합계 문자로 인쇄될 수 0있습니다 1.

각 파일이 있으면 나란히 붙여넣을 수 있습니다 paste -d '\0'. 그런 다음 00과 11을 세어 grep -xce 00 -e 11그들이 공유하는 자릿수를 계산할 수 있습니다.

bits() {
  perl -lne 'BEGIN{$/=\8192}; print for split "", unpack("b*", $_)' "$1"
}
paste -d '\0' <(bits file1) <(bits file2) | grep -xce 00 -e 11

관련 정보