感谢支持
我们一直在努力

Linux Bash awk sed 处理文件

上此文章说到看别人没有用脚本处理文件,今天轮到我干处理文件的活儿了,忙了很久终于算是搞出来了。看这个文章的首先要懂得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(,)函数也可以,要还没有进一步研究。

最后经过我进一步处理:脚本如下


   


#!/bin/sh


newMCUtime=$(awk ‘NR==1{print$4,$5}’ ../Project/ARIB_RPT_Sample/Misc/MCU_code_P8/Lst/TK880_SubMCU_Release.map)
    echo Set New Time to temperory Tmp_system_cfg file which copy from Workdir directory ……
    sed “s|^CompileTime.*|CompileTime = ${newMCUtime};|” < ../../Workdir/system.cfg >Tmp_system_cfg.txt
    echo write back new Content……
    cat Tmp_system_cfg.txt > ../../Workdir/system.cfg
    rm Tmp_system_cfg.txt


可能有点看不清,我贴一个图:





这样看起来就比较清楚了,要是图片没显示,我相册里边应该也有。脚本的魅力实在是很强大,略微几行字但是能做大事情,有个的人说:我用Windows,其实Windows也有脚本的。你也可以把Windows下的活改到Linux下边啊,这样就能用Shell脚本了……

赞(0) 打赏
转载请注明出处:服务器评测 » Linux Bash awk sed 处理文件
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏