我使用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格式保存。)
答案 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