Chinaunix首页 | 论坛 | 博客
  • 博客访问: 424284
  • 博文数量: 58
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 623
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-26 18:48
个人简介

在生存面前,那纯洁的理想,原来是那么脆弱不堪!

文章分类

全部博文(58)

文章存档

2022年(1)

2021年(1)

2019年(3)

2018年(6)

2017年(6)

2016年(14)

2015年(10)

2014年(16)

2013年(1)

我的朋友

分类: 系统运维

2015-09-07 21:43:09

有时候需要对字符数据做算术运算,如果少量数据,我们可以直接使用计算器,但是如果有大量的数据,或者需要筛选的数据,我们在Linux下利用awk工具就能很好的完成.

求和运算.
        1)加入有一串数字,存放在文本文件test.txt中。
  1.     [root@nagios ~]# cat test.txt
  2.     2 3 4 5
        2)利用awk命令。
  1.     cat test.txt | awk 'BEGIN {sum=0} {for(i=1;i<=NF;i++) sum+= $i} END{print $0 "\n"sum}'
  2.     2 3 4 5
        14
        单引号 ‘ 中分成了三部分,第一部分和sum的初始化。
                                              第二部分循环NF(内置变量,当前输入记录的域个数)次,累加。
                                              第三部分输出。

阶梯求和。
       
1)首先我们利用脚本,得到一个数据表。       

make_num.sh

  1. #!/bin/sh
  2. for((i=0;i<=10;i++));    do
  3.     for((j=0;j<=i;j++)); do
  4.         echo -n "$j ";
  5.     done;
  6.     echo -e "\r"
  7. done
        2) 生成数据为:

[root@nagios ~]# ./make_num.sh

  1. 0
  2. 0 1
  3. 0 1 2
  4. 0 1 2 3
  5. 0 1 2 3 4
  6. 0 1 2 3 4 5
  7. 0 1 2 3 4 5 6
  8. 0 1 2 3 4 5 6 7
  9. 0 1 2 3 4 5 6 7 8
  10. 0 1 2 3 4 5 6 7 8 9
  11. 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}'

  1. 0=0
  2. 0+1=1
  3. 0+1+2=3
  4. 0+1+2+3=6
  5. 0+1+2+3+4=10
  6. 0+1+2+3+4+5=15
  7. 0+1+2+3+4+5+6=21
  8. 0+1+2+3+4+5+6+7=28
  9. 0+1+2+3+4+5+6+7+8=36
  10. 0+1+2+3+4+5+6+7+8+9=45
  11. 0+1+2+3+4+5+6+7+8+9+10=55
        这里没有BEGIN 和END部分,在每一行做一次累加处理,直接输出。

从输入中求和。
        我们设计一个程序可以边输入,边计算。
  1.     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,我们就需要每输入一个数就回车,然后累加。为了效果,我们每次都做了输出。

运行效果。

  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++} '
  2.     10
  3.     10=10
  4.     30
  5.     10+30=40
  6.     20
  7.     10+30+20=60
  8.     40
  9.     10+30+20+40=100

统计运算。

统计apache启动的进程数。

  1. ps -A | awk 'BEGIN {sum=0} /httpd/{sum++;} END{printf "All httpd precess: %d\n",sum} '
       ps 列出所有的进程。  /httpd/正则匹配进程名。sum累加,最后输出。


阅读(3172) | 评论(0) | 转发(0) |
0

上一篇:AWK命令详解

下一篇:NFS服务器配置

给主人留下些什么吧!~~