有时候需要对字符数据做算术运算,如果少量数据,我们可以直接使用计算器,但是如果有大量的数据,或者需要筛选的数据,我们在Linux下利用awk工具就能很好的完成.
求和运算.
1)加入有一串数字,存放在文本文件test.txt中。
-
[root@nagios ~]# cat test.txt
-
2 3 4 5
2)利用awk命令。
-
cat test.txt | awk 'BEGIN {sum=0} {for(i=1;i<=NF;i++) sum+= $i} END{print $0 "\n"sum}'
-
2 3 4 5
14
单引号 ‘ 中分成了三部分,第一部分和sum的初始化。
第二部分循环NF(内置变量,当前输入记录的域个数)次,累加。
第三部分输出。
阶梯求和。
1)首先我们利用脚本,得到一个数据表。
-
#!/bin/sh
-
for((i=0;i<=10;i++)); do
-
for((j=0;j<=i;j++)); do
-
echo -n "$j ";
-
done;
-
echo -e "\r"
-
done
2) 生成数据为:
[root@nagios ~]# ./make_num.sh
-
0
-
0 1
-
0 1 2
-
0 1 2 3
-
0 1 2 3 4
-
0 1 2 3 4 5
-
0 1 2 3 4 5 6
-
0 1 2 3 4 5 6 7
-
0 1 2 3 4 5 6 7 8
-
0 1 2 3 4 5 6 7 8 9
-
0 1 2 3 4 5 6 7 8 9 10
3)利用awk命令:
[root@nagios ~]# ./make_num.sh | awk '{ sum = 0; col = NF; for(i=1;i<col;i++){ sum += $(i); printf "%d", $(i); if(i!=col-1) printf "+"; } printf "=%d\n" ,sum}'
-
0=0
-
0+1=1
-
0+1+2=3
-
0+1+2+3=6
-
0+1+2+3+4=10
-
0+1+2+3+4+5=15
-
0+1+2+3+4+5+6=21
-
0+1+2+3+4+5+6+7=28
-
0+1+2+3+4+5+6+7+8=36
-
0+1+2+3+4+5+6+7+8+9=45
-
0+1+2+3+4+5+6+7+8+9+10=55
这里没有BEGIN 和END部分,在每一行做一次累加处理,直接输出。
从输入中求和。
我们设计一个程序可以边输入,边计算。
-
awk 'BEGIN {sum=0; i=0} {sum+=$1; x[i]=$1; for(j=0;j<=i;j++){ printf "%d",x[j]; if(i!=j) printf "+"} print "=" sum; i++} '
这里取每一个读取记录的第一个参数$1,我们就需要每输入一个数就回车,然后累加。为了效果,我们每次都做了输出。
-
[root@nagios ~]# awk 'BEGIN {sum=0; i=0} {sum+=$1; x[i]=$1; for(j=0;j<=i;j++){printf "%d",x[j];if(i!=j) printf "+"} print "=" sum; i++} '
-
10
-
10=10
-
30
-
10+30=40
-
20
-
10+30+20=60
-
40
-
10+30+20+40=100
统计运算。
-
ps -A | awk 'BEGIN {sum=0} /httpd/{sum++;} END{printf "All httpd precess: %d\n",sum} '
ps 列出所有的进程。 /httpd/正则匹配进程名。sum累加,最后输出。
阅读(3332) | 评论(0) | 转发(0) |