Linux常用命令之awk

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用命令之awk相关的知识,希望对你有一定的参考价值。

标题:awk命令的使用

作用:awk是非常好用的数据处理工具,主要处理每一行的字段内的数据,默认的字段的分割符为空格键或[tab]键

一、awk脚本的基本结构:

  awk ‘BEGIN{print "start"} pattern {commands} END{print "ends"} file // 一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三部分是可选的,任意一部分都可以不出现在脚本中

                                                         //通常是被单引号或双引号括住的

      例如: awk ‘BEGIN{i=0}{i++}END{print i}‘ filename

      awk "BEGIN{i=0}{i++}END{print i}" filename

二、awk的执行过程

       awk ‘BEGIN {commands} patern{commands}END{commands}‘ filename

   [1]第一步:执行BEGIN{commands} 语句块中的语句;

   [2]第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{commands}语句块,它逐行扫描文件,第一行到最后一行重复这个过程,直到文件全部被读取完毕;

   [3]第三步:当读至输入流末尾时候,执行END{commands}语句块

       BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块。比如变量的初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

       END语句块在awk从输入流读取完所有的行之后执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成。

三、awk实例

    例1:pay.txt文件内容格式:姓名、第一个月工资、第二个月工资、第三个月工资,将每一个人的三月工资总和计算出来

            Name 1st       2nd      3th

     VBird  2300   3400    2500

     Bmtsai 2000  2000     2300

     Bird2   4300   4200      4100

         命令:awk ‘NR==1{printf ("%10s%10s%10s%10s%10s\\n", $1, $2, $3, $4,"Total")} NR>=2{total=$2+$3+$4; printf ("%10s%10s%10s%10s%10s\\n", $1, $2, $3, $4,total)}‘ pay.txt

         输出:技术分享

    例2:将a.dat的第一列内容和第二列内容相加

             a.dat内容:    b.dat内容:

               技术分享      技术分享

           命令: awk ‘BEGIN{i=0;j=0}FNR==NR{array[i++]=$1;next}{total=array[j]+$1;print array[j],$1,total;j++}‘ a.dat b.dat

    输出结果:技术分享

           解释:NR和FNR是awk内置变量,表示行号,NR表示表示处理的记录的行数,FNR表示当前处理的文件的行数。能能够导致读入下一个输入行,并返回到脚本的顶部,这可以避免对当前输入行执行其他的操作过程。   

以上是关于Linux常用命令之awk的主要内容,如果未能解决你的问题,请参考以下文章

Linux常用基本命令:三剑客命令之-awk动作用法

Linux常用基本命令:三剑客命令之-awk模式用法

Linux常用基本命令:三剑客命令之-awk 三元表达式

Linux常用基本命令:三剑客命令之-awk模式用法

linux之awk命令获取最后一列

linux之awk命令获取最后一列