awkåäöumlaut-chars的长度为2

时间:2011-09-28 04:55:52

标签: string macos awk diacritics

我使用awk(mac os x)只打印n个字符和更长的行。

如果我在一个看起来像这样的文本文件(strings.txt)上尝试:

four
foo
bar
föö
bår
fo
ba
fö
bå

我运行这个awk脚本:

awk ' { if( length($0) >= 3 ) print $0 } ' <strings.txt 

输出结果为:

four
foo
bar
föö
bår
fö
bå

(最后两行不应该打印)。看起来像包含变音字符(å,ä,ö......)的单词算作两个字符。

(输入文件以UTF8格式保存。)

3 个答案:

答案 0 :(得分:4)

尝试设置您的语言区域:

LC_ALL=en_US.UTF-8 awk 'length >= 3' infile

将en_US.UTF-8更改为正确的区域设置。

答案 1 :(得分:3)

BSD awk(又名BWK awk),预装在macOS上(从macOS 10.13开始仍然如此),很遗憾 - 不支持Unicode

您的选择是:

  • IF 您知道所涉及的字符适合单字节编码,例如ISO-8859-1,您可以使用{{ 1}} 如下:

    iconv
  • 安装 iconv -f UTF-8 -t ISO-8859-1 file | awk 'length >= 3' | iconv -f ISO-8859-1 -t UTF-8 ;例如,通过Homebrew
    • awk
    • gawk
  • 使用 支持Unicode的 不同的预安装工具,例如mawk

    brew info gawk

答案 2 :(得分:0)

试试这个:

$  echo "four
foo
bar
föö
bår
fo
ba
fö
bå
"|awk ' {x=$0;gsub(/./,"x",x); if( length(x) >= 3 ) print $0 } ' 

<强>输出

four
foo
bar
föö
bår