Board logo

标题: [文本处理] mawk: 最快的 awk(快于 C, C++, Java, Perl, Ruby,...) [打印本页]

作者: tmplinshi    时间: 2013-5-20 09:55     标题: mawk: 最快的 awk(快于 C, C++, Java, Perl, Ruby,...)

mawk 在处理体积较大的文本时,速度快于大部分语言。(当然,有可能其他语言写的不是最佳代码。)

以下两个链接有速度对比:


我测试了一个 4MB 的文本,测试结果为:


E:\我的文档\桌面\awka\新建文件夹>timeit gawk.exe -f test.awk test.txt >nul

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        10:00 am, Monday, May 20 2013
Elapsed Time:     0:00:08.375
Process Time:     0:00:08.390
System Calls:     201908
Context Switches: 98745
Page Faults:      6790
Bytes Read:       4611650
Bytes Written:    327340
Bytes Other:      650953

E:\我的文档\桌面\awka\新建文件夹>timeit test.exe test.txt >nul

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        10:00 am, Monday, May 20 2013
Elapsed Time:     0:00:03.046
Process Time:     0:00:03.046
System Calls:     97107
Context Switches: 36341
Page Faults:      28548
Bytes Read:       4450691
Bytes Written:    109665
Bytes Other:      327492

E:\我的文档\桌面\awka\新建文件夹>timeit mawk.exe -f test.awk test.txt >nul

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        10:01 am, Monday, May 20 2013
Elapsed Time:     0:00:02.703
Process Time:     0:00:02.718
System Calls:     66853
Context Switches: 32698
Page Faults:      3051
Bytes Read:       4454663
Bytes Written:    110994
Bytes Other:      326450


------------------------------------------------------------

e:\我的文档\桌面>mawk
mawk: no program

mawk: SYNOPSIS
   mawk [-W option] [-F value] [-v var=value] [--] 'program text' [file ...]
   mawk [-W option] [-F value] [-v var=value] [-f program-file] [--] [file ...]

mawk: OPTIONS
-W version     -Wv      Version info;
-W dump        -Wd      outputs assembler-like internal code representation;
-W interactive -Wi      unbuff. writes => stdout, line buff. reads <= stdin;
-W exec file   -We file last option: Program is read from file;
-W sprintf=num -Ws=num  set size of the internal sprintf buffer to num bytes;
-W posix_space -Wp      forces mawk not to consider '\n' to be space;
-F value                sets the field separator, FS, to value;
-v var=value            assigns value to program variable var;
-f program-file         program text is read from file instead of from the
                         command line, multiple use of -f options is allowed;
--                      indicates the unambiguous end of options.


e:\我的文档\桌面>mawk -W version
mawk 1.3.3/Win32 Nov 1996, Copyright (C) Michael D. Brennan

Ported to Win32 by O. Schoenfeldt (http://www.klabaster.com)

Open Watcom C/C++ 1.8

compiled limits:
max NF             32767
sprintf buffer      1020


-----------------------------------------
http://www.klabaster.com/freeware.htm#mawk
-----------------------------------------

http://bcn.bathome.net/s/tool/index.html?key=mawk
作者: pdang    时间: 2013-5-20 11:20

还不会怎么用呢 学习一下
作者: Python    时间: 2013-5-20 12:44

如果真能快过C语言,那就太神奇了,难道是汇编?
作者: wuhengsi    时间: 2013-5-20 22:59

代码比较优化嘛,是不是
作者: namejm    时间: 2013-5-20 23:54

不过这个速度"最快"的荣誉属于1.3.3版,到了1.3.4版就大幅降下来了
用楼主所给的数据居然需要处理约15s,几乎是gawk 3.1.5版的两倍
用gawk 4.1测试,约11s
也就是说,版本的不同,也会有速度上的差异,需要选好版本
另外,mawk一个比较要命的问题是:正则表达式不支持{m,n}这样的区间
作者: Batcher    时间: 2013-5-22 13:53

回复 5# namejm


    mawk --re-interval 支持这个参数吗?
作者: namejm    时间: 2013-5-22 16:20

在 mawk 中写上 --re-interval 时也没法支持正则的 {m,n} 区间表达




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2