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

 

 

你可能感兴趣的:(Liunx中使用expr命令并结合sed计算文件中的数字)