一个不会coding的girl Linux日常之命令awk

Linux日常之命令awk

 

参考:http://www.zsythink.net/archives/tag/awk/

 

一. 命令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数组,保存的是命令行所给定的各参数
ARGCARGC数组的个数

 

 

 

 

 

 

 

    

 

  (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
0
0
« 上一篇: Linux日常之命令tee
» 下一篇: Linux日常之命令grep

posted on 2017-12-01 18:41 一个不会coding的girl 阅读(3314) 评论(0) 编辑 收藏

转载于:https://www.cnblogs.com/jobs-lgy/p/9767661.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值