저는 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