最近在调gps模块,要把代码里打印的NMEA的msg给抓出来,单独存在一个文件里,素来听闻awk的强大,这次打算借这个机会学习一波:
也就是说,大概是从下面这样的log中,过滤出$开头的所有行,并删除每一行前面的无关内容:
2019年 02月 28日 星期四 12:02:04 CST 2019年 03月 03日 星期日 22:39:29 CST hello sed hello sed test : djdhdhk test '$'NMEA: djdhdhk test \'$\'NMEA: djdhdhk $fjdshfkjhdjkf 896874h32gkjdsgfdsjf dfsdu09we7r8923ycdsioyv-92yhgfihdlvhd0f9vu $NmEA: ssfhgskvhdsk dfjskhvudisb hjksghfgjdhojfoh $NMEA: hudkgciugs98yc0sudjlds
要想完成这件事,需要掌握以下知识:
然后就是具体操作了:
awk '{for(i=1;i<NF;i++) {if($i ~ /\$/){ printf(" %s FIND %s %s\n",NR, $i, $(i+1)) } } }' log.txt
输出以下内容:
如果不想要行号和提示,则只需
awk '{for(i=1;i<NF;i++) {if($i ~ /\$/){ printf(" %s %s\n", $i, $(i+1)) } } }' log.txt