首页 > 系统服务 > 详细

Linux日常之命令awk

时间:2019-04-02 14:26:57      阅读:175      评论:0      收藏:0      [点我收藏+]

一. 命令awk简介

    1. awk是一种编程语言,用于对文本和数据进行处理的

    2. 具有强大的文本格式化能力

    3. 利用命令awk,可以将一些文本整理成为我们想要的样子

    4. 命令awk是逐行进行处理的

 

二. grep、sed、awk的简单比较

    1. 命令grep,更适合单纯的查找或匹配文本

    2. 命令sed,更适合对匹配到的文本进行编辑

    3. 命令awk,更适合文本格式化,对文本进行较复杂的格式处理

 

三. 命令awk基本语法

    awk [options] ‘pattern{action}‘ file

   1. 在没有options和pattern的情况下,使用命令awk

    技术分享图片

    2. pattern包括两种特殊模式,分别是BEGIN和END

    (1)BEGIN模式,是指命令在处理文本之前执行

    技术分享图片

    (2)END模式,是指命令在处理文本之后执行

              技术分享图片

    (3)BEGIN模式和END模式同时存在时,其中,BEGIN与END之间的{}相当于一个循环体,对文件中的每一行进行处理

    技术分享图片

  3. 常用的参数

    (1)-F,用于指定输入分隔符

    技术分享图片

    (2)-v,用于设置变量的值

    技术分享图片

    技术分享图片

      从文件中输入变量

    技术分享图片

 

四. 变量

  awk中的变量分为内置变量和自定义变量两种

  1. 内置变量

FS 输入字段分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS 输入记录分隔符(输入换行符),指定输入时的换行符
ORS 输出记录分隔符(输出换行符),指定输出时的换行符
NF 当前行的字段数(当前行被分隔符分割成了几段)
NR 当前行的行号
FNR 不同文件分别计数
FILENAME 当前文件名
ARGV 数组,保存的是命令行所给定的各参数
ARGC ARGC数组的个数

 

 

 

 

 

 

 

    

 

  (1)FS:以“:”为字段输入分隔符,输出第1列和第2列

      1)使用-F选项指定输入分隔符

    技术分享图片

      2)使用内置变量FS指定输入分隔符,需要注意的是,使用变量时,要使用-v选项来指定对应的变量

    技术分享图片

    (2)OFS:以“#”为字段输出分隔符,输出第1列和第2列

    技术分享图片

    (3)RS:以“:”为行输入分隔符,输出对应的行号和当前行内容。

      需要注意的是,两个红框中的内容,由于Jack和DEF、Alice和GHI之间没有“:”,所以在awk中被认作为同一行

    技术分享图片

    (4)ORS:以“---”为行输出分隔符

    技术分享图片

    (5)NF:当前行的字段数

      其中,$NF表示的是最后一个字段的内容,$(NF-1)表示的是倒数第二个字段的内容

    (6)NR:当前行号

    (7)FNR:不同文件分别计数

    技术分享图片

    (8)FILENAME:显示当前行的文件名

    技术分享图片

    (9)ARGV:数组,保存的是命令行所给定的各参数

    技术分享图片

    (10)ARGC:保存的是ARGV数组的个数

    技术分享图片

  2. 自定义变量

    (1)使用-v来自定义变量(在上第三节已介绍)

    (2)在awk中直接定义

    技术分享图片

   

五. 格式化中,awk使用printf时需要注意的问题

  1. 使用printf输出的文本不会换行,如果需要换行,可以在对应的“格式替换符”后加入“\n”进行转义

  2. 使用printf输出时,“指定的格式”与“被格式化的文本”之间,要用“,”隔开

  3. 使用printf输出时,“格式”中的“格式替换符”必须与“被格式化的文本”一一对应(个数要相同)

 

六. awk中的pattern模式

  当awk进行逐行处理时,会把pattern作为条件,判断当前行是否满足条件,若跟pattern匹配,则进行后面的处理,否则,跳过当前行。

  技术分享图片

  1. 正则表达式

    awk下的正则表达式与grep下的区别:

    1)awk下:   awk ‘/正则表达式/{print}‘ /etc/passwd

    2)grep下:  grep "正则表达式" /etc/passwd

    技术分享图片

    需要注意的是 

      1)在awk的正则表达式中,若出现"/",则需要进行转义,在其前面加"\"

      2)当使用{x,y}类型次数匹配的正则表达式时,需要使用--posix选项或--re-interval选项

  2. 行范围匹配

    awk ‘/正则表达式1/,/正则表达式2/{action}‘ file

    表示的是,从被正则表达式1匹配到的行开始,到被正则表达式2匹配到的行结束,之间所有的行都会执行对应的动作。

 

七. 关系运算符

关系运算符 含义 用法实例
< 小于 x<y
<= 小于等于 x<=y
> 大于 x>y
>= 大于等于 x>=y
== 等于 x==y
!= 不等于 x!=y
~ 匹配 x~/正则表达式/
!~ 不匹配 x!~/正则表达式/

 

 

 

 

 

 

 

 

 

八. 条件判断

1
2
3
4
5
6
if(表达式)
    {语句1}
else if(表达式)
    {语句2}
else
    {语句3}

  实例

1
2
3
4
5
6
7
8
9
10
11
12
awk ‘BEGIN{
    test=100;
    if(test>90){
         print "very good";
    }
    else if(test>60){
        print "good";
    }
    else{
       print "no pass";
    }
}‘

  

九. 循环语句

  1. while循环语句

1
2
while(表达式)
    {语句}

  实例

1
2
3
4
5
6
7
8
9
awk ‘BEGIN{
    test=100;
    total=0;
    while(i<=test){
        total+=i;
        i++; 
    }        
    print total;             
}‘

  2. for循环语句

    1)第一种

1
2
for(变量 in 数组)
    {语句}

    2)第二种

1
2
for(变量;条件;表达式)
    {语句}

  3. do循环语句

1
2
3
do
    {语句}
while(条件)

 

Linux日常之命令awk

原文:https://www.cnblogs.com/jiadi321/p/10642345.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!