Мне удалось воспроизвести это на SOLARIS с запущенным ksh.
sol bash $ printf '\034a\034b\034c' | cat -v
^\a^\b^\c$
sol bash $ printf '\034a\034b\034c' | awk -F$'\x1c' '{print NF}'
4
sol bash $ printf '\034a\034b\034c' | awk -F$'\034' '{print NF}'
4
sol ksh $ printf '\034a\034b\034c' | cat -v
^\a^\b^\c$
sol ksh $ printf '\034a\034b\034c' | awk -F$'\x1c' '{print NF}'
1
sol ksh $ printf '\034a\034b\034c' | awk -F$'\034' '{print NF}'
1
Я не могу подтвердить, является ли это проблемой ksh или awk, поскольку в обоих случаях происходит сбой.
sol ksh/bash $ printf '\034a\034b\034c' | awk 'BEGIN{FS="\034"}{print NF}'
1
Все вышеперечисленные случаи успешно работают в любой системе Linux (которая запускается по умолчанию GNU awk), но, похоже, она великолепно провалилась.
Следующий трюк - это обходной путь, который вообще не может выйти из строя (до того момента, пока он не выйдет из строя):
sol ksh/bash $ printf '\034a\034b\034c' | awk 'BEGIN{FS=sprintf("%c",28)}{print NF}'
4
Вышеприведенное работает, потому что мы позволяем awk установить FS, используя функцию sprintf
, где мы передаем десятичное число 28=x1c=034