GNU fold e GNU fmt só entendem bytes, não caracteres. Para envolver um certo número de caracteres, você pode usar sed.
sed 's/.\{20\}/&\n/g' <in.txt
【財經中心、政治中心╱台北報導】看不慣政
府施政效率緩慢,鴻海集團董事長郭台銘動念
選總統!《壹週刊》報導,在川普勝選當晚,
郭召集鴻海高層幹部,進行美國總統大選換人
後的應變策略演練,讓人驚訝的是,郭詢問在
場幹
Se você quisesse quebrar no espaço em branco (útil para vários idiomas), aqui está um script awk rápido e sujo.
awk '
BEGIN {width = 20}
NF == 0 {column = 0; print}
{
split($0, a);
for (i in a) {
w = length(a[i]) + 1;
column += w;
if (column > width) {column = w; print ""};
if (column != w) printf " ";
printf "%s", a[i];
}
}
END {if (column) print ""}'
Em qualquer caso, certifique-se de que suas configurações de localidade estejam corretas. Especificamente, LC_CTYPE
deve designar a codificação de caracteres correta, por exemplo, LC_CTYPE=en_US.utf8
ou LC_CTYPE=zh_CN.utf8
(qualquer código de idioma disponível no seu sistema serve) para Unicode codificado como UTF-8.
Observe que isso conta caracteres, não a largura da tela. Até mesmo fontes de largura fixa podem ter caracteres de largura dupla e isso geralmente é feito para caracteres chineses, por exemplo, uma largura de caractere de 20 para o texto acima ocupa 40 colunas em terminais típicos.