주어진 바이너리 파일의 레코드 수를 확인하고 싶습니다. 파일 구분 기호는 사용자 입력으로 사용됩니다. 전체 어떻게 진행하나요?
답변1
LC_ALL="C" awk -v RS="${Delim}" 'END { print NR; }' < filename
RS는 레코드 구분 기호이자 정규식이므로 오류(예: 잘못된 정규식)가 발생하면 스크립트가 실패합니다.
LC_ALL="C"는 바이너리의 임의 바이트 값이 UTF-8 인코딩으로 해석될 수 있는 문제를 피하기 위한 임시 내보내기입니다.
그러나 각 정수, 부동 소수점 또는 이중의 단일 바이트 범위가 0x00에서 0xFF까지인 이진 파일에서 지정된 구분 기호가 어떻게 작동하는지 이해하고 싶습니다.
구분 기호가 아닌 모든 바이트를 제거한 다음 나머지 바이트를 계산할 수도 있습니다. 이 경우 Delim은 패턴이 아니지만 매뉴얼 페이지에 따라 이스케이프해야 할 수 있는 문자 집합일 수 있습니다.
tr -cd "${Delim}" < filename | wc -c
tr의 "set"은 멀티바이트 항목이 아닙니다. "ab"는 "ab"가 아닌 "a" 또는 "b"를 테스트합니다.