`
febird
  • 浏览: 254269 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LC_ALL=en_US.UTF-8 让 awk 慢了 40 倍!

阅读更多

  无意中发现,在一台服务器上,非常简单的awk程序,比C的等价物要慢40倍,感觉有点不太正常,还以为的确是awk太慢。不得其解,到另一台服务上试了一下,相同的 awk 程序,相同的测试数据,这台服务器的速度与C相当,也就是说,同样是awk,两台机器速度差了 40 倍,而两台机器配置基本相当。非常困惑,找了两小时的原因,终于发现gawk手册 里面有一段话:

For other single-character record separators, using ‘LC_ALL=C ’ will give you much better performance when reading records. Otherwise, gawk has to make several function calls, per input character to find the record terminator.

在看两台机器的 locale,结果发现,慢的机器上:

[root@slow-server]# locale
LANG=en_US.UTF-8
LC_XXXX=en_US.UTF-8

...
LC_ALL=en_US.UTF-8

快的机器上:

[root@fast-server]# locale
LANG=en_US
LC_XXXX=en_US

...
LC_ALL=   <空>

马上试验,将slow-server的locale改掉:

export LC_ALL=C

速度马上快了40倍,与fast-server相当。

 

这应该是awk实现上的一个缺陷,即便是对utf8,也不应该慢这么多,如果缓冲合适,最多慢2~3倍就可以了,为什么非要gawk has to make several function calls, per input character

 

分享到:
评论
2 楼 febird 2010-02-01  
可以把utf8转化成utf32,就可以在缓冲区内随机访问任意字符了,而 iconv 的速度是非常快的。
1 楼 mikeandmore 2010-01-30  
个人猜测。

utf8是流解码,下标访问要O(n)

相关推荐

    all-awk.rar_All.awk_NS2仿真_all awk_awk_awk-scripts

    《全面解析NS2仿真与AWK脚本:深入理解all-awk.rar》 在计算机科学领域,网络模拟和分析是至关重要的环节,特别是在设计和优化网络协议时。NS2(Network Simulator 2)是一个广泛使用的开源网络模拟工具,它允许...

    strawberry-perl-5.32.1.1-64bit.7z

    Perl语法受到C、shell脚本和 awk等语言的影响,特别适合处理文本和文件,常用于系统管理、网络编程、网页开发、生物信息学等领域。 描述中提到的"strawberry-perl-5.32.1.1-64bit安装包"是指这个压缩包内包含的是64...

    ActivePerl-5.20.1.2000-MSWin32-x64-298557.msi

    Perl的语法灵活且强大,借鉴了C、sed、awk等语言的特性,因此被称为“实用提取和报告语言”(Practical Extraction and Reporting Language)。 ActivePerl的5.20.1版本意味着这是基于Perl的5.20主线版本,这个版本...

    ActivePerl-5.14.2.1402-MSWin32-x86-295342.rar

    "win7、win8、win10亲测好用"意味着这个版本的ActivePerl经过验证,可以在Windows 7、8和10这些不同的Windows操作系统上顺利运行。 "activeperl说明.txt"可能是一个包含有关如何安装、配置和使用ActivePerl的指南或...

    ActivePerl-5.10.0.1005-MSWin32-x86-290470.zip

    它的语法灵活且强大,同时借鉴了C、sed、awk、shell脚本等多种语言的特点。 ActivePerl是Perl的一个流行实现,特别是在Windows平台上。它包含了Perl解释器、核心模块以及一些额外的工具,使得在Windows上安装和使用...

    ActivePerl-5.14.2.1402-MSWin32-x64-295342.zip

    Perl的设计理念是结合了C、sed、awk等编程语言的特点,尤其适用于文本处理和系统管理任务。在Windows环境中,Perl通常通过像ActivePerl这样的发行版来提供,以便更好地适应平台特性。 标题中的"ActivePerl-5.14.2....

    oracle安装.docx

    并添加一行:`export DISPLAY=`who am i|awk -F \( '{print $2}'|awk -F\) '{print $1}'`:0.0` 2. 修改 oracle 用户的 `.bash_profile` 文件: ```bash export ORACLE_BASE=/home/oracle export ORACLE_HOME=/home/...

    strawberry-perl-5.30.0.1-64bit.rar

    它的设计融合了多种语言的特性,如C、sed、awk等,特别适合文本处理和系统管理任务。Perl 5.30.0.1是Perl语言的一个版本,其中的每个小版本号(如0.1)通常代表了对前一版本的一些小改进和bug修复。 描述中的...

    ActivePerl-5.16.2.1602-MSWin32-x64-296513 (1).zip

    它结合了C、shell脚本和awk等语言的特点,具有丰富的内置函数和强大的正则表达式支持,使程序员能够快速处理字符串和数据。 ActivePerl是Perl的一个流行实现,尤其对于Windows用户来说。它包含了所有必要的组件,如...

    常用shell脚本,更加快捷的管理服务器

    如果熟练掌握 shell 脚本,可以让我们操作计算机变得更加轻松,也会节省很多时间。 下面我们将详细介绍六个常用的 shell 脚本实例: 1. Dos 攻击防范(自动屏蔽攻击 IP) 首先,我们可以使用 shell 脚本来防范 ...

    AWK-file.rar_awk_awk tcl_delay awk_jitter awk _jitter ns-2

    这个名为"AWK-file.rar_awk_awk tcl_delay awk_jitter awk _jitter ns-2"的压缩包文件显然是针对网络性能分析的,特别是使用AWK进行分析。下面将详细介绍涉及的知识点。 1. **AWK**: AWK是一种编程语言,由Aho、...

    nginx-aarch64-1.20.1二进度安装包含安装脚本

    local_ip=$(hostname -I | awk '{print $1}') #二进包部署nginx install_nginx(){ tar -zxf $RUN_PATH/package/nginx-aarch64-1.20.1.tar.gz -C /usr/local/ cat &gt;/lib/systemd/system/nginx.service [Unit] ...

    some-ns2-trace-awk.rar_.awk_fichier awk ns2_ns2 script_some ns2

    这个"some-ns2-trace-awk.rar"压缩包包含了一个专门针对NS2仿真的AWK脚本,用于解析NS2的trace文件,从而分析网络性能的关键指标。AWK是一种强大的文本处理语言,常用于处理和分析结构化的数据文件,如日志文件或...

    mysql 主从复制

    A=`/usr/bin/mysql -u repl -p repl -h 192.168.255.194 -e "SHOW MASTER STATUS" | grep mysql-bin | awk '{print $2}'` /usr/bin/mysql -u root -e "STOP SLAVE; RESET SLAVE ALL; CHANGE MASTER TO MASTER_HOST...

    strawberry-perl-5.32.0.1-64bit.msi

    描述中提到"官网下载的比较慢,特此提供下载",这意味着这个文件可能是一个镜像源或者用户从官方站点获取的副本,目的是为了方便其他用户快速下载,特别是对于那些在官方服务器下载速度较慢的地区或网络环境。...

    linux全志R16的linux系统编译的资料_20170502_1655.7z

    Preparing to unpack .../liblwp-mediatypes-perl_6.02-1_all.deb ... Unpacking liblwp-mediatypes-perl (6.02-1) ... Selecting previously unselected package libhttp-message-perl. Preparing to unpack .../...

    骏马金龙--精通awk.pdf

    骏马金龙--精通awk.pdf,骏马金龙--精通awk.pdf

    strawberry-perl-5.28.1.1-1-win64-x64.zip

    它的语法混合了C、sed、awk和其他语言的特点,使得它易于学习和使用。Perl在1987年由Larry Wall首次发布,至今已发展到多个版本,包括提到的5.28.1.1。 Strawberry Perl详解: Strawberry Perl是专门为Windows操作...

    Node.js-awkj--node版本的awk

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。而 "awkj" 是一个针对 Node.js 的工具,其灵感来源于经典的 Unix 工具 "awk"。"awk" 是一种强大的...

    awk-script.zip_NS2 awk_awk_ns2_awk_trace

    在IT领域,尤其是在网络模拟和数据分析中,`awk` 是一个强大的命令行工具,用于处理结构化文本数据。本主题将深入探讨如何使用`awk`脚本来解析`ns2`(Network Simulator 2)的追踪文件。`ns2`是一个广泛使用的开源...

Global site tag (gtag.js) - Google Analytics