awk学习笔记之行求和和列求和

 1.测试的文本内容awk1.t

  
  
  
  
  1. [root@demo ~]# cat awk1.t  
  2. reed  100 90 100 
  3. Reed  98  92 100 
  4. huih  100 90 100 
  5. deer  99  91  99 
  6. hjl   92  100 80 
  7. gsl   80  80  80 
  8. zww   85  85  85 
  9. swe   85  85  85 

2.测试的脚本t.sh

  
  
  
  
  1. [root@demo ~]# cat t.sh  
  2. #!/bin/awk -f 
  3.   
  4. # just for testing the awk 
  5. # 15/11/2012 
  6. # reed 
  7.   
  8. BEGIN
  9.      print "name\tChinese\tEnglish\tMath\tTotal" 
  10.      print "-------------------------------------" 
  11. {total=(($2+$3+$4))} 
  12. {print $1"\t"$2"\t"$3"\t"$4"\t"total} 
  13.   
  14. {(C+=$2)(E+=$3)(M+=$4)(T+=(($2+$3+$4)))} 
  15.   
  16. END
  17.     print "-------------------------------------" 
  18.     print "Count\t"C"\t"E"\t"M"\t"

3.测试结果

  
  
  
  
  1. [root@demo ~]# ./t.sh awk1.t  
  2. name    Chinese English Math    Total 
  3. ------------------------------------- 
  4. reed    100     90      100     290 
  5. Reed    98      92      100     290 
  6. huih    100     90      100     290 
  7. deer    99      91      99      289 
  8. hjl     92      100     80      272 
  9. gsl     80      80      80      240 
  10. zww     85      85      85      255 
  11. swe     85      85      85      255 
  12. ------------------------------------- 
  13. Count   739     713     729     2181 

4.测试结论

从这次实验当中自己学到了1)BEGIN/END的用法2)如何进行行的求和以及列求和3)打印格式控制

5.测试过程中遇到的一些问题和疑问

  
  
  
  
  1. #!/bin/awk -f 
  2.   
  3. # just for testing the awk 
  4. # 15/11/2012 
  5. # reed 
  6.   
  7. BEGIN
  8.      print "name\tChinese\tEnglish\tMath\tTotal" 
  9.      print "-------------------------------------" 
  10. # 注意看这里,没有大括号  
  11. total=(($2+$3+$4))  
  12. {print $1"\t"$2"\t"$3"\t"$4"\t"total} 
  13.   
  14. {(C+=$2)(E+=$3)(M+=$4)(T+=(($2+$3+$4)))} 
  15.   
  16. END
  17.     print "-------------------------------------" 
  18.     print "Count\t"C"\t"E"\t"M"\t"

再看打印的结果

  
  
  
  
  1. [root@demo ~]# ./t.sh awk1.t  
  2. name    Chinese English Math    Total 
  3. ------------------------------------- 
  4. reed  100 90 100 
  5. reed    100     90      100     290 
  6. Reed  98  92 100 
  7. Reed    98      92      100     290 
  8. huih  100 90 100 
  9. huih    100     90      100     290 
  10. deer  99  91  99 
  11. deer    99      91      99      289 
  12. hjl   92  100 80 
  13. hjl     92      100     80      272 
  14. gsl   80  80  80 
  15. gsl     80      80      80      240 
  16. zww   85  85  85 
  17. zww     85      85      85      255 
  18. swe   85  85  85 
  19. swe     85      85      85      255 
  20. ------------------------------------- 
  21. Count   739     713     729     2181 

疑问就存在这里了,为什么定义变量的时候不加大括号就会再一次打印文本内容的呢,加了之后就不会的呢?在awk中{}表示什么意义呢?

网上终于找到相关资料了,我直接引用:

  
  
  
  
  1. 操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四部份: 
  2.  
  3. 变量或数组赋值 
  4.  
  5. 输出命令 
  6.  
  7. 内置函数 
  8.  
  9. 控制流命令 

 

本文出自 “[reed@卢伟开~]#rm -rf /” 博客,转载请与作者联系!

你可能感兴趣的:(awk)