sed/awk脚本数据处理一则

@sed/awk脚本数据处理一则

需求

某日一同事问我能否从一个串口数据里提取固定位置的几个数据
就像下面所示,提取9,10位的数据并转换位10进制值:
AA 55 00 9F AC 01 00 00 25 8C 00 9B AA 55 00 9F AC 01 00 00 25 65 00 72 AA 55 00 9F AC 01 00 00 25 7F 00 68 AA 55 00 9F AC 01 00 00 25 A0 00 B7 AA 55 00 9F AC 01 00 00 25 75 00 62 AA 55 00 9F AC 01 00 00…

这个很容易想到用sed/awk命令实现,可以在windows下cygwin执行:

为了便于理解,分解成以下几个步骤:

  1. cd d:/
    (进入d分区, 要转换的原始文件(假定位1.txt)放在该目录下;或者cd 到待处理文件所在目录)‘ cygwin环境)
  2. sed ‘s/AA 55/\nAA 55/g’ 1.txt > 2.txt
    (以AA 55开头分行,分行后文件名2.txt; 该命令吧原始数据分行)
  3. cat 2.txt | grep “AA 55” |tee 3.txt
    去掉非完整数据帧
  4. awk ‘{print “0x”$7 $8" 0x" $9 $10}’ 3.txt |tee 4.txt
    7/8位和9/10字段生成单独的列 (16进制)
  5. awk -n ‘{print $1+0 " " $2+0 }’ 4.txt >5.txt
    16进制转10进制

综上所述,可以通过管道把上述步骤合并位一条命令:
sed ‘s/AA 55/\nAA 55/g’ 1.txt | cat - |grep “AA 55” | awk ‘{print “0x”$7 $8" 0x" $9 $10}’ - | awk -n ‘{print $1+0 " " $2+0 }’ -

还有一个更好的方式是利用开源项目 SerialChart.
link

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值