awk基础内容总结
英语文化交流 > 技术博客 > awk基础内容总结
awk基础内容总结
时间: 分类:技术博客

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命令等进阶的内容,在此就不列举了。

随机阅读

Copyright © 2017 英语文化交流 All Rights Reserved.