标题: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} pattern{commands}END{commands}' filename

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

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

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

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

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

三、awk内置变量

           [1]$n 是当前行的按照指定域分隔符(默认是空格或[TAB]]键)分割后的第n个字段,比如n为1 表示第1个字段,n为2表示第2个字段

    [2]$0 则是记录了执行过程中当前行的文本内容

[3]NF 每一行($0)拥有的字段总数

[4]NR 目前awk所处理的"第几行"数据

[5]FNR 表示当前所处理的文本内的"第几行"数据

[6]FS 目前的域分割符号,可以通过FS字段指定文本的域分割符

[7]OFS 输出字段的分割符(默认是一个空格)

       [8]ORS 输出的记录分割符(默认是一个换行)

[9]ARGIND 命令行中处理的当前文件的位置(从1开始)

[10]ARGC 命令行参数的数目

[11]ARGV 命令行参数的数组

四、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

输出:

     解释:NR表示当前处理的行数(行号),如果满足NR==1即处理的是第一行的内容Name 1st 2nd 3th,就执行后面的括弧中的打印(printf)命令;如果满足NR>=2那么就会执行第一个括弧中的命令{total=$2+$3+$4; printf   

("%10s%10s%10s%10s%10s\n", $1, $2, $3, $4,total)}。所以,awk命令格式中的pattern决定了是否对当前输入的行执行其后面的commands。

例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

          或awk 'BEGIN{i=0;j=0}ARGIND==1{array[i++]=$1}ARGIND==2{total=array[j]+$1;print array[j],$1,total;j++}' a.dat b.dat

    输出结果:

解释:NR和FNR是awk内置变量,表示行号,NR表示处理的记录的行数,FNR表示当前处理的文件的行数,因为awk的参数可以同时跟多个文件名并且按照其出现的顺序逐个输入并处理,而NR              表示截止当前处理的总的行数,而FNR表示当前所处理的文

件的行数。能能够导致读入下一个输入行,并返回到脚本的顶部,这可以避免对当前输入行执行其他的操作过程。

例3:去除重复记录——假设某文件test.da记录如下:

命令:awk ' !a[$0]++{print $0}' test.da

   输出:

解释:awk默认数组的初始值是0,当记录已经出现在的数组a中的时候,那么!a[$0]为假,所以就不会执行后面的print $0

Linux常用命令之awk的更多相关文章

  1. 【操作系统之四】Linux常用命令之awk

    一.概念awk是一个报告生成器,拥有强大的文本格式化能力. 数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出: 依次对每一行进行处理,然后输出: 它在命令行中使用,但更多是作为脚本 ...

  2. linux 常用命令大全

    linux 常用命令大全 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统 ...

  3. linux 常用命令及技巧

    linux 常用命令及技巧 linux 常用命令及技巧:linux 常用命令总结: 一. 通用命令: 1. date :print or set the system date and time 2. ...

  4. 最近用到的Linux常用命令总结

    最近用到的Linux常用命令总结 - ls :显示当前目录文件信息 `ls -a -l` - cd :目录跳转 cd .. 上级目录 cd ~ home目录 cd - 最近目录 - cat :在屏幕上 ...

  5. Linux 常用命令使用方法大搜刮

    Linux 常用命令使用方法大搜刮 1.# 表示权限用户(如:root),$ 表示普通用户  开机提示:Login:输入用户名  password:输入口令   用户是系统注册用户成功登陆后,可以进入 ...

  6. linux常用命令 、查看日志、web排查

    linux常用命令 ps aux|grep xxx (比如 ps aux|grep tomcat ps aux|grep tomcat-portalvip ps aux|grep nginx 等) r ...

  7. 100个命令Linux常用命令大全

    Linux常用命令大全100条: 1,echo "aa" > test.txt 和 echo "bb" >> test.txt//>将原 ...

  8. Linux常用命令大全(非常全!!!)

    Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...

  9. 【转载】Linux常用命令

    Linux常用命令大全(非常全!!!) 转载出处:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html 系统信息 arch 显示机器的处理器架构( ...

随机推荐

  1. 获取某几个分类下的前N条数据 mssql语句

    方案1: (SELECT top 10 *  FROM 表 where type=3  ) UNION ALL   (SELECT top 10 *  FROM 表 where type=4  )  ...

  2. VC++ 中滑动条(slider控件)使用 [转+补充]

    滑动控件slider是Windows中最常用的控件之一.一般而言它是由一个滑动条,一个滑块和可选的刻度组成,用户可以通过移动滑块在相应的控件中显示对应的值.通常,在滑动控件附近一定有标签控件或编辑框控 ...

  3. 【flash】关于flash的制作透明gif的一个小技巧

    关于flash的制作透明gif的一个小技巧 或者说是一个需要注意的地方 1.导出影片|gif,得到的肯定是不透明的.2.想要透明背景,必须通过发布.3.flash中想要发布gif动画的话,不能有文字, ...

  4. sc7731 Android 5.1 Camera 学习之一Camera 两个对象

    众所周知,在Android中Camera采用了C/S架构,其中Camera server 与 Camera client之间通过Android Binder IPC机制进行通信.在Camera实现的框 ...

  5. SB集中营

    我犯了一个超级低质的错误,是关于结构体内部变量的以 . 或者 –> 调用的问题. 当时的考虑是,如果结构体内变量是指针用  ->,其他用 .  . 呵呵了. 难道是因为两天没休息好吗?还是 ...

  6. Receive Windows Messages In Your Custom Delphi Class - NonWindowed Control - AllocateHWnd

    http://delphi.about.com/od/windowsshellapi/a/receive-windows-messages-in-custom-delphi-class-nonwind ...

  7. icacls备份与还原ACL列表(NTFS权限)--Robocopy

    icacls c:\windows\* /save AclFile /T- 将 c:\windows 及其子目录下所有文件的 ACL 保存到 AclFile. icacls c:\windows\ / ...

  8. 标准C++中的STL容器类简单介绍

    SGI -- Silicon Graphics[Computer System] Inc.硅图[计算机系统]公司. STL -- Standard Template Library 标准模板库.   ...

  9. Codeforces Round #146 (Div. 1) A. LCM Challenge 水题

    A. LCM Challenge 题目连接: http://www.codeforces.com/contest/235/problem/A Description Some days ago, I ...

  10. Codeforces Educational Codeforces Round 5 D. Longest k-Good Segment 尺取法

    D. Longest k-Good Segment 题目连接: http://www.codeforces.com/contest/616/problem/D Description The arra ...