找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20313|回复: 1

[格式转换] awka - 把 awk 脚本转换成 c 源码

[复制链接]
发表于 2013-5-20 03:02:18 | 显示全部楼层 |阅读模式
awka 可以把 awk 脚本转换成 c 源代码,然后可以通过 gcc 等工具编译成 exe。

编译成 exe 其中一个好处是能够提高代码运行速度。(我测试了一个 awk 代码,用 gawk 执行需要 8 秒钟,编译后只要 3 秒)

配置步骤:


示例:
批处理如何按列进行数据分解? 这个帖子中的 awk 代码为例。awk 代码是:
  1. gawk "{ for (i=2; i<=NF; i++){print $1 "\t" $i >f i-1 ".txt"} }" f="a_" a.txt
复制代码
以下保存为 test.awk:
  1. f="a_" { for (i=2; i<=NF; i++){print $1 "\t" $i >f i-1 ".txt"} }
复制代码
最后执行:
  1. awka -f test.awk >test.c
  2. gcc -Os -s test.c -o test.exe libawka.a

  3. rem 以上两行可以用 CompileAWK.bat test 代替。
复制代码
test.exe 的使用方法是 test.exe a.txt。或者去掉 test.awk 中的 f="a_",编译后则使用 test.exe f="a_" a.txt


==================================================================
编译后的 exe 体积是 158 KB。用 tcc 编译可能会更小,测试了下会报错:
E:\我的文档\桌面\awka>tcc -o o.exe libawka.a test.c
tcc: error: undefined symbol 'awka_error'
tcc: error: undefined symbol '_awka_getdval'
tcc: error: undefined symbol '_awka_setdval'
tcc: error: undefined symbol '_awka_getsval'
tcc: error: undefined symbol '_awka_getreval'
tcc: error: undefined symbol 'awka_setsval'
tcc: error: undefined symbol '_awka_arg_change'
tcc: error: undefined symbol 'a_bivar'
tcc: error: undefined symbol '_awka_usefnvar'
tcc: error: undefined symbol '_awka_addfnvar'
tcc: error: undefined symbol 'fs_or_fw'
tcc: error: undefined symbol '_awka_re2s'
tcc: error: undefined symbol '_rebuild0'
tcc: error: undefined symbol '_rebuild0_now'
tcc: error: undefined symbol '_awka_setdol0_len'
tcc: error: undefined symbol '_rebuildn'
tcc: error: undefined symbol 'awka_getline'
tcc: error: undefined symbol 'awka_vardblset'
tcc: error: undefined symbol 'awka_tmp_dbl2var'
tcc: error: undefined symbol 'awka_strconcat3'
tcc: error: undefined symbol 'awka_doln'
tcc: error: undefined symbol 'awka_arg1'
tcc: error: undefined symbol 'awka_print'
tcc: error: undefined symbol 'awka_postinc'
tcc: error: undefined symbol '_max_base_gc'
tcc: error: undefined symbol '_max_fn_gc'
tcc: error: undefined symbol 'awka_initgvar'
tcc: error: undefined symbol '_awkafn'
tcc: error: undefined symbol 'awka_init'
tcc: error: undefined symbol '_dol0_used'
tcc: error: undefined symbol 'awka_exit'
tcc: error: undefined symbol 'awka_arraysplitstr'
tcc: error: undefined symbol '_dol0_only'
tcc: error: undefined symbol '_awka_dol0'


http://bcn.bathome.net/s/tool/index.html?key=awka
发表于 2013-5-20 09:00:41 | 显示全部楼层
这个好
学习了
回头安装一个gcc试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:14 , Processed in 0.017361 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表