Это может быть невозможно с вашими реальными данными, но я смог воспроизвести вашу ошибку и создать заменяющий код, который работает более надежно. Он также должен быть быстрее, поскольку он избегает регулярных выражений.
Сначала давайте создадим воспроизводимый тест:
$ awk 'BEGIN{printf "%c%c%c%c", 0, 1, 2, 3}' > myfile.bin
$ hexdump -C myfile.bin
00000000 00 01 02 03 |....|
00000004
Хорошо, теперь мы можем проверить это:
[gawk 4.0.2]$ gawk --version |awk NR==1
GNU Awk 4.0.2
[gawk 4.0.2]$ gawk '/\x00\x01\x02\x03/ {exit 1}' myfile.bin; echo $?
0
И в другой системе:
[gawk 4.1.4]$ gawk --version |awk NR==1
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 4.0.1, GNU MP 6.1.2)
[gawk 4.1.4]$ gawk '/\x00\x01\x02\x03/ {exit 1}' myfile.bin; echo $?
1
Воспроизводится.
Давайте использовать index()
вместо регулярного выражения:
[gawk 4.0.2]$ gawk 'index($0, "\x00\x01\x02\x03") { exit 1 }' myfile.bin; echo $?
1
1018 *
[gawk 4.1.4]$ gawk 'index($0, "\x00\x01\x02\x03") { exit 1 }' myfile.bin; echo $?
1