<dl id='3az1b'></dl>
    <fieldset id='3az1b'></fieldset>
    <i id='3az1b'></i>
  1. <span id='3az1b'></span>

    <acronym id='3az1b'><em id='3az1b'></em><td id='3az1b'><div id='3az1b'></div></td></acronym><address id='3az1b'><big id='3az1b'><big id='3az1b'></big><legend id='3az1b'></legend></big></address>
  2. <tr id='3az1b'><strong id='3az1b'></strong><small id='3az1b'></small><button id='3az1b'></button><li id='3az1b'><noscript id='3az1b'><big id='3az1b'></big><dt id='3az1b'></dt></noscript></li></tr><ol id='3az1b'><table id='3az1b'><blockquote id='3az1b'><tbody id='3az1b'></tbody></blockquote></table></ol><u id='3az1b'></u><kbd id='3az1b'><kbd id='3az1b'></kbd></kbd>
  3. <ins id='3az1b'></ins>

        1. <i id='3az1b'><div id='3az1b'><ins id='3az1b'></ins></div></i>

          <code id='3az1b'><strong id='3az1b'></strong></code>

          linux awk 内置变量使用介绍

          • 时间:
          • 浏览:16
          • 来源:124软件资讯网

              一、内置变量

            属性说明
            $0当前记载(作为单个变量)
            $1~$n当前记载的第n个字段  ,字段间由FS分开
            FS输入字段分开符 默认是空格
            NF当前记载中的字段个数 ,就是有几多列
            NR已经读出的记载数 ,就是行号  ,从1最先
            RS输入的记载他隔符默 以为换行符
            OFS输出字段分开符 默认也是空格
            ORS输出的记载分开符  ,默以为换行符
            ARGC下令行参数个数
            ARGV下令行参数数组
            FILENAME当前输入文件的名字
            IGNORECASE若是为真  ,则举行忽略巨细写的匹配
            ARGIND当前被处置惩罚文件的ARGV标志符
            CONVFMT数字转换花样 %.6g
            ENVIRONUNIX情况变量
            ERRNOUNIX系统错误新闻
            FIELDWIDTHS输入字段宽度的空缺分开字符
            FNR当前记载数
            OFMT数字的输特别式 %.6g
            RSTART被匹配函数匹配的字符串首
            RLENGTH被匹配函数匹配的字符串长度
            SUBSEP\034

              2、实例

              1、常用操作

              代码如下:

              [chengmo@localhost ~]$ awk '/^root/{print $0}' /etc/passwd

              root:x:0:0:root:/root:/bin/bash

              /^root/ 为选择表达式  ,$0代表是逐行

              2、设置字段分开符号(FS使用要领)

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd

              root /bin/bash

              FS为字段分开符  ,可以自己设置  ,默认是空格  ,由于passwd内里是”:”分开  ,以是需要修改默认分开符 。NF是字段总数 ,$0代表当前行记载 ,$1-$n是当前行  ,各个字段对应值  。

              3、记载条数(NR,FNR使用要领)

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{FS=":"}{print NR,$1,$NF}' /etc/passwd

              1 root /bin/bash

              2 bin /sbin/nologin

              3 daemon /sbin/nologin

              4 adm /sbin/nologin

              5 lp /sbin/nologin

              6 sync /bin/sync

              7 shutdown /sbin/shutdown

              ……

              NR获得当前记载所在行

              4、设置输出字段分开符(OFS使用要领)

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd

              1^^root^^/bin/bash

              OFS设置默认字段分开符

              5、设置输出行记载分开符(ORS使用要领)

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' /etc/passwd

              1 root /bin/bash^^2 bin /sbin/nologin^^3 daemon /sbin/nologin^^4 adm /sbin/nologin^^5 lp /sbin/nologin

              从上面看 ,ORS默认是换行符 ,这里修改为:”^^” ,所有行之间用”^^”分开了  。

              6、输入参数获取(ARGC ,ARGV使用)

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' /etc/passwd

              ARGC=2

              0=awk

              1=/etc/passwd

              ARGC获得所有输入参数个数  ,ARGV获得输入参数内容  ,是一个数组  。

              7、获得传入的文件名(FILENAME使用)

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{FS=":";print FILENAME}{print FILENAME}' /etc/passwd

              /etc/passwd

              FILENAME,$0-$N,NF 不能使用在BEGIN中  ,BEGIN中不能获得任何与文件记载操作的变量  。

              8、获得linux情况变量(ENVIRON使用)

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{print ENVIRON["PATH"];}' /etc/passwd

              /usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache:/usr/lib/icecc/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbi

            n:/usr/java/jdk1.5.0_17/bin:/usr/java/jdk1.5.0_17/jre/bin:/usr/local/mysql/bin:/home/web97/bin

              ENVIRON是子典型数组  ,可以通过对应键值获得它的值 。

              9、输出数据花样设置:(OFMT使用)

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{OFMT="%.3f";print 2/3,123.11111111;}' /etc/passwd

              0.667 123.111

              OFMT默认输特别式是:%.6g 保留六位小数  ,这里修改OFMT会修改默认数据输特别式  。

              10、按宽度指定分开符(FIELDWIDTHS使用)

              复制代码

              代码如下:

              [chengmo@localhost ~]$ echo 20100117054932 | awk 'BEGIN{FIELDWIDTHS="4 2 2 2 2 3"}{print $1"-"$2"-"$3,$4":"$5":"$6}'

              2010-01-17 05:49:32

              FIELDWIDTHS其花样为空格分开的一串数字  ,用以对记载举行域的分开  ,FIELDWIDTHS="4 2 2 2 2 2"就表现$1宽度是4  ,$2是2  ,$3是2 ....  。这个时间会忽略:FS分开符  。

              11、RSTART RLENGTH使用

              代码如下:

              [chengmo@localhost ~]$ awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'

              11 11 4

              [chengmo@localhost ~]$ awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }'

              0 0 –1

              RSTART 被匹配正则表达式首位置 ,RLENGTH 匹配字符长度  ,没有找到为-1.

              以上是:awk的一些内置变量使用  ,希望有什么问题可以与我交流  。