Liunx中使用expr命令并结合sed计算文件中的数字

Liunx中使用expr命令并结合sed计算文件中的数字

 

 

数据样例:

已选择153682行。

已选择539794行。

已选择627588行。

 

echo 计算所有 已选择 的数据 总共有多少条记录

sed -n '{/已选择/s/[^0-9]*//gp}' exp.txt | sed -n 's/[0-9]*/ &/;:a;$!N;/[0-9]*/s/\n/ + /;ta;P;D' | xargs expr

 

 

思路:

1、先选择包含“已选择”的记录行(也就是ORACLE的SPOOL导出数据时带出来的),然后整行中替换,将非数字类型全部替换为空;

sed -n '{/已选择/s/[^0-9]*//gp}' exp.txt

得到的结果将是:

153682

539794

627588

 

2、将第一行数据的头部分加个空格s/[0-9]*/ &/;

得到的结果将是:

153682

539794

627588

 

3、将组装数学表达式,循环将多行变为一行,将换行符替换成“空格+空格”

:a;$!N;/[0-9]*/s/\n/ + /;ta;P;D

得到的结果将是:

 153682 + 539794 + 627588

 

命令行说明:首先设置一个标签a,除了最后一行($!N;),其他行都执行把下一行的数据添加到模式空间(N),当匹配到以数字的行([0-9]*)就把换行符换成“空格+空格”,如果替换成功(t),就重复执行(再从a开始)否则就将模式空间的第一行打印出来(P;),然后删除模式空间的第一行(D),开始下一个循环(:a)。

 

4、将表达式作为参数传给expr 命令进行计算

 | xargs expr

 

得到结果:1321064

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值