上此文章说到看别人没有用脚本处理文件,今天轮到我干处理文件的活儿了,忙了很久终于算是搞出来了。看这个文章的首先要懂得Shell,否则很费劲。事情的缘由是这样的,我们产品有个单独的小模块MCU,软件是单独通过Keil编译的,但是这个软件的代码还是和Linux代码的主程序放在一起,我想在主程序中获得MCU的编译时间,然后写到主程序的一个配置文件里边。想起来简单,但是要用脚本自动执行起来就显得比较棘手,废话少说,下面来真的:第一步:
首先是获得Keil编译时间的文件,这个时间应该是在*.map里边:
打开TK880_SubMCU_Release.map,内容:
所以说这个时间是可以拿到,我们通过awk来拿时间:awk "NR==1{print$4,$5}" TK880_SubMCU_Release.map >tempfile.txt 这句话是说把文件TK880_SubMCU_Release.map的第一行的低四和第五个域变量拿到,NR是awk的内建变量,NR==1表示第一行,$4和$5就表示这个域的内容,>表示定向输出 ,awk中的域默认是按照空格分的。现在你要是: $ cat tempfile.txt 08/03/2010 15:16:06 其实,awk "{count=$4$5; print count}" 这个命令也是可以拿到的,只不过此时值赋给了变量count而已。 问题:难道这个时间只能写到一个文件中么?非也! $ newTime=$(cat tempfile.txt) $ echo $newTime 08/03/2010 15:16:06就是将tempfile.txt的内容赋给了newTime;其实更神奇的还有: newTime=$(awk "NR==1{print$4,$5}" TK880_SubMCU_Release.map),这样一步到位拿到时间。还有更神的newTime=`awk "END{print$0}" tempfile.txt`,真是弄不懂awk "END{print$0}" tempfile.txt这个命令是被啥样一个东西包裹着的,缺了这个还不行,注意,这可是从shell从awk往外引用变量,一遍见到的都是awk使用Shell变量哦。绝对不是单引号,看到没?想右斜,知道的告诉我下。 " ` "他娘,我用软键才能盘输出 `。 第二步: 我们要将这个时间信息写到一个文件system.cfg中,下面继续:
想办法找到这一行,然后将时间替换了就行了。就这么简单哈。 一想到替换和搜索,自然想起来sed,我试了试 sed "s/^CompileTime.*/CompileTime = $newTime;/" 但是貌似不行。后来在请教网上一位高手后,sed "s|^CompileTime.*|CompileTime = ${newTime};|" 一下就搞定了。好像还有个sub(,)函数也可以,要还没有进一步研究。Linux Bash awk 提取文件Ubuntu 主题安装工具:Gstyle相关资讯 Linux知识
- 时光总是太匆匆!Linux已经诞生23 (08/29/2014 14:12:03)
- Linux虚拟文件系统之文件打开(sys (02/14/2012 11:41:54)
- 2012 年 Linux 峰会时间表 (02/14/2012 06:47:27)
| - 报告称当前 Linux 人才抢手 高薪也 (02/15/2012 06:35:56)
- 解析企业为何选择Linux及其特别之 (02/14/2012 08:17:59)
- Linux禁用字符闪烁的方法 (11/02/2011 10:28:25)
|
本文评论 查看全部评论 (0)