您的位置:首页 > 其它

awk基础内容总结

2019-04-13 21:37 465 查看

awk基础知识总结

一、awk介绍

       awk是由Alfred Aho 、Peter Weinberger 和 Brian Kernighan这三个人姓氏的首个字母组成。linux系统所使用的awk其实是gawk,也就是GNU awk,简称为gawk。
       awk其实还是一门编程语言,它支持变量、数组、条件判断、循环、函数等功能。从功能上说,它更适合对复杂的文本进行处理并格式化输出。

二、awk基本语法格式

awk [options] 'program' file ...
其中program的格式语法:pattern {action statements;..}

  • PATTERN:设定数据的匹配模式。
  • ACTIONS:处理数据的动作,常见的有print、printf。

       PATTERN或ACTIONS二者可省去其一,省去PATTERN时表示对所有行都执行ACTIONS,省略ACTIONS表示对符合条件的行执行print动作。

一个简单的例子:取出磁盘空间的使用率。

[root@centos7 /tmp]#df | grep /dev/sd |  awk '{print $1,$5}'
/dev/sda2 16%
/dev/sda5 1%
/dev/sda1 16%

       其中位置变量$1,$2...为该行的第几个字段,"$0"表示整行。而输出多个字段,字段之间使用逗号","分隔,如{print $1,$5}。输出时,仍默认以空格分隔各输出字段。

三、awk的变量

       awk支持内置变量和自定义的变量,使用选项-v来定义变量。

  • FS:输入字段分隔符,默认是空格和制表符。
  • OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
  • RS:输入记录的分隔符,即行分隔符,用于分割每一行,默认是换行符。
  • ORS:输出记录的分隔符,输出时用指定的符号代替换行符,默认为换行符。
  • NF:字段的数量
  • NR:记录的行号
  • FNR: 多个文件的行号、记录号的统计,分开统计。
  • FILENAME:当前文件名
  • ARGC:命令行参数的个数。

举例说明:

  1. 指定输入分隔符为:,而输出分隔符使用---,输出结果:

    [root@centos7 /tmp]#awk -v FS=":" -v OFS="---" '{print $1OFS$3}' /etc/passwd
    root---0
    bin---1
    daemon---2
    adm---3
    lp---4
    ......
  2. 取出文本中的字段数量,注意NF的使用前面不需要加$符号。

    [root@centos7 /tmp]#awk -F: '{print NF}' /etc/passwd
    7
    7
    ......
  3. 取出倒数第二个字段的内容,此变量需要前加$符号。

    [root@centos7 /tmp]#awk -F: '{print $(NF-1)}' /etc/passwd
    /root
    /bin
    /sbin
    /var/adm
    .....
  4. 使用FNR变量来处理多个文件,统计记录号。当读取第二个文件时,FNR是从0重新开始计数的,这点与NR不同。

    [root@centos7 /tmp]#awk '{print FNR}' /etc/issue /etc/inittab
    1
    2
    3
    1
    2
    3
    ......

四、格式化输出

       awk使用print和printf输出数据,格式化输出语句的命令格式为:

printf “FORMAT” , item1, item2, ...

(1) 必须指定FORMAT。
(2) 不会自动换行,需要显式给出换行控制符\n。
(3) FORMAT中需要分别为后面每个item指定格式符。

格式符: 与后面的item要一一对应

%c:显示字符的ASCII码
%d, %i:显示十进制整数
%e, %E:显示科学计数法数值
%f:显示为浮点数
%g, %G:以科学计数法或浮点形式显示数值
%s:显示字符串
%u:无符号整数
%%:显示%自身

修饰符:

N:显示宽度;N为数值,宽度不足时若为左对齐则右边空格补足,若右对齐则左边空格补足。
-:左对齐,默认是右对齐。如%-15s。
+:显示数值正负号。
0:表示以0填充。

五、BGEIN和END

       BEGIN和END是一个特殊的PATTERN,BEGIN引导的程序是在awk读取第一个文件第一行前要执行的awk程序,END引导的程序是在awk处理完最后一个文件最后一行后要执行的awk程序。
       通常BEGIN用于输出一个类似的表格的标题,END则用于最后的总结性输出。所以awk完整一点的格式可由:BEGIN语句块、能够使用模式匹配的通用语句块、 END语句块,共3部分组成:

awk [options] 'BEGIN{action;… }pattern{action;… }END{action;… }' file ...

六、总结

       awk除了上述的基础功能外,还包括数组、流程控制语句如条件判断语句、while循环、for循环,函数功能,awk调用shell命令等进阶的内容,在此就不列举了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐