Linux常用命令之awk

   2016-09-09 0
核心提示:标题:awk命令的使用 作用:awk是非常好用的数据处理工具,主要处理每一行的字段内的数据,默认的字段的分割符为空格键或[tab]键 一、awk脚本的基本结构:awk 'BEGIN{print start} pattern {commands} END{print ends}' file // 一个awk脚本通常由:BEGIN语句

标题: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

输出: Linux常用命令之awk

解释: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内容:

Linux常用命令之awk Linux常用命令之awk

命令: 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

输出结果: Linux常用命令之awk

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

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

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

Linux常用命令之awk

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

输出: Linux常用命令之awk      

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

Linux系统之文本格式化工具awk http://www.linuxidc.com/Linux/2016-02/128150.htm

AWK简介及使用实例 http://www.linuxidc.com/Linux/2013-12/93519.htm

Linux awk文本分析工具 http://www.linuxidc.com/Linux/2015-12/126217.htm

Linux文本处理工具之awk http://www.linuxidc.com/Linux/2015-01/111437.htm

如何在Linux中使用awk命令 http://www.linuxidc.com/Linux/2014-10/107542.htm

文本分析工具-awk http://www.linuxidc.com/Linux/2014-12/110939.htm

使用awk格式化输出文本 http://www.linuxidc.com/Linux/2016-04/130193.htm

本文永久更新链接地址 http://www.linuxidc.com/Linux/2016-09/135046.htm

 
标签: AWK
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Awk 命令学习总结、AWk命令系列学习(linux she
    前面的话 学习linux 的同人,都知道linux shell文本处理能力非常强大。有一组强大的文本处理工具:grep,sed,awk 。 其中grep 经常用作查找匹配文本、sed用作文本编辑替换、awk也是最强大的,经常用作报表生成! 它的处理效率非常高,一个几百M文件 ,也能在秒
    02-09
  • linux基础命令介绍八:文本分析awk
    linux基础命令介绍八:文本分析awk
    awk是一种模式扫描和处理语言,在对数据进行分析处理时,是十分强大的工具。awk[options]'pattern{action}'file...awk的工作过程是这样的:按行读取输入(标准输入或文件),对于符合模式pattern的行,执行action。当pattern省略时表示匹配任何字符串;当action
  • awk入门应用
    awk概述使用语法常用命令选项相关输出命令print item1,item2,…printf FORMAT,item1,item2,….相关格式符相关修饰符相关内建变量相关内置函数相关操作符相关模式相关控制语句及示例if(condition) statementsif(condition){statements} else {statements}while
    12-23 AWK
  • awk大法(未完待续)
    awk大法(未完待续)
    awkawk概念一款用于数据流的文本处理工具,它将文件作为记录序列处理。在一般情况下,文件内容的每行都是一个记录。每行内容都会被分割成一系列的域,因此,我们可以认为一行的第一个词为第一个域,第二个词为第二个,以此类推。AWK程序是由一些处理特定模式
    12-23 AWK
  • week6
    1、请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白 字符开头的行的行首加#;:%s@^[[:space:]]\+[^[:space:]]@#&@g2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub
    12-23 AWK
  • AWK学习总结
    AWK是一种优良的文本处理工具。其名称得自于它的创始人阿尔佛雷德艾侯、彼得温伯格和布莱恩柯林汉姓氏的首个字母。AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整
    12-11 AWK
  • AWK入门基础教程
    AWK入门基础教程
    什么是AWKAWK是一种用于处理文本的编程语言工具,一个模式匹配程序。一个典型的示例是将数据转换成格式化的报告。在命令行输入如下awk命令:awk -F: '{ print username:$1 }' /etc/passwd打印所有username。-F用来指定分隔符,默认使用空格。AWK也可以使用模
    12-11 AWK
  • linux中的awk命令
    本文主要介绍了Linux中的awk命令的一些知识以及如何使用awk编程。不同于grep的查找、sed的编辑等命令,awk命令在文本处理和生成报告等地方是经常用到的一个强大命令。原文链接:http://tianweili.github.io/blog/2015/02/24/linux-awk/简介awk命令主要用于文
    12-11 AWK
  • linux基础命令介绍八:文本分析 awk
    awk是一种模式扫描和处理语言,在对数据进行分析处理时,是十分强大的工具。awk [options] 'pattern {action}' file...awk的工作过程是这样的:按行读取输入(标准输入或文件),对于符合模式pattern的行,执行action。当pattern省略时表示匹配任何字符串;当ac
  • zabbix监控云端mysql等实例。
    zabbix监控云端mysql等实例。
    传统的mysql 服务器 用zabbix很容易实现,单对于云端的mysql 实例 我想大家都是用的云自带的监控。我们前端时间aws 云端mysql 实现主从 进程的出现问题,然而aws 自带的监控没有。我们就想到 zabbix 实现对aws mysql 实例的监控。1监控的服务远程去连接 awsmy
    12-01 MySQLAWK
点击排行