Использование test2.txt
$ cat /tmp/test2.txt | hexdump -C
00000000 47 61 6c 6c 6f 20 63 65 6c 74 69 63 6f 0a 47 65 |Gallo celtico.Ge|
00000010 73 97 20 42 61 6d 62 69 6e 6f 0a |s. Bambino.|
Вот что случилось с awk
:
$ cat /tmp/test2.txt | awk '/\x97/{print}'
Ges Bambino
$ cat /tmp/test2.txt | awk '/[\x7F-\xFF]/{next;}; 1'
Gallo celtico
Ges Bambino
Т.е. строка Ges Bambino
содержит строку char \x97
, и awk
подтверждает это в первой команде. Тем не менее, \x97
находится в диапазоне \x7F-\xFF
поэтому строка должна быть пропущена во второй команде, но это не так.
Это действительно похоже на ошибку awk
для меня.
Любые комментарии?
PS. делая это более очевидным:
$ cat /tmp/test2.txt | awk '/\x97/{next}; 1'
Gallo celtico
$ cat /tmp/test2.txt | awk '/[\x97]/{next}; 1'
Gallo celtico
Ges Bambino
ОБНОВИТЬ:
Как отметил @KamilMaciorowski, это связано с местным. Т.е. вышесказанное происходит когда под
$ set | egrep '^LANG|^LC'
LANG=zh_CN.UTF-8
тогда как оба
cat /tmp/test2.txt | LC_ALL=C awk '/[\x97]/{next}; 1'
cat /tmp/test2.txt | LC_ALL=C awk '/[\x7F-\xFF]/{next;}; 1'
дают правильные результаты.
Тем не менее, это проблема, не так ли?