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