美文网首页
Linux中的部分awk命令 2019-11-18

Linux中的部分awk命令 2019-11-18

作者: vicLeo | 来源:发表于2019-11-18 17:10 被阅读0次

    awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。 

    AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

    调用awk

    有三种方式调用awk

    1.命令行方式:awk [-F  field-separator] 'commands' input-file(s)

    其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。

    在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

    2.shell脚本方式

    将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。

    相当于shell脚本首行的:#!/bin/sh可以换成:#!/bin/awk

    3.将所有的awk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file(s)

    其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

    awk脚本

    awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

    关于awk脚本,我们需要注意两个关键词BEGIN和END。

    BEGIN{ 这里面放的是执行前的语句 }

    END {这里面放的是处理完所有的行后要执行的语句 }

    {这里面放的是处理每一行时要执行的语句}

    实例

    假设last -n 5的输出如下

    [root@www ~]#last -n5 <== 仅取出前五行

    root    pts/1 192.168.1.100    Tue  Feb  10 11:21  still logged in 

    root    pts/1 192.168.1.100    Tue   Feb 10 00:46-02:28(01:41)

    root    pts/1 192.168.1.100    Mon  Feb  9  11:41-18:30(06:48)

    dmtsai  pts/1 192.168.1.100  Mon  Feb  9  11:41-11:41(00:00)

    root    tty1                               Fri     Sep  5  14:09-14:10(00:01)

    如果只是显示最近登录的5个帐号

    #last -n 5 | awk '{print $1}'

    root

    root

    root

    dmtsai

    root

    awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。

    awk内置变量

    awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

    ARGC              命令行参数个数

    ARGV              命令行参数排列

    ENVIRON            支持队列中系统环境变量的使用

    FILENAME          awk浏览的文件名

    FNR                浏览文件的记录数

    FS                设置输入域分隔符,等价于命令行 -F选项

    NF                浏览记录的域的个数

    NR                已读的记录数

    OFS                输出域分隔符

    ORS                输出记录分隔符

    RS                控制记录分隔符

    相关文章

      网友评论

          本文标题:Linux中的部分awk命令 2019-11-18

          本文链接:https://www.haomeiwen.com/subject/hsybictx.html