shell编程——文本处理利器awk命令(一)

awk是一种处理文本数据的编程语言,它的设计使它非常适合于处理由行和列组成的文本数据。

1    基本语法

awk pattern { actions }

以上语法表示当某个文本行符合pattern指定的匹配规则时,执行actions所执行的操作。

两者必须保证有一个,如果省略pattern则表示对所有的文本行执行actions所表示的操作,如果省略actions表示将匹配成功的行输出到屏幕。

awk的匹配模式非常灵活,可以是一下任意一种:

正则表达式

关系表达式:如x>34

模式1 模式2

BEGIN

END

awk命令的操作由一个或多个命令、函数或者表达式组成,他们之间由换行符或者分号隔开,并且位于大括号内,通常有四种操作:

变量或者数组赋值

输出命令

内置函数

流程控制语句

注:awk命令的语法隐含一个条件结构,即如果符合匹配规则,则执行后面的操作。

2    awk工作流程

通过命令行:awk 'program-test' datafile

eg.    awk '{ print }' scores.txt

通过awk脚本:awk -f program-file file...

eg.    awk -f 1.awk scores.txt

注:awk脚本中不能含有除awk语句之外的其他命令或者语句

通过可执行文件

3    awk的模式匹配

关系表达式:

awk '$2 > 80 { print }' scores.txt  //  第二列成绩超过80分

正则表达式:

放在两条斜线之间:/regular_expression/

awk '/^(Tom|Kon)/ { print }' scores.txt

混合模式:

支持使用逻辑运算符&& || !

awk '/^K/ && $2 > 80 { print }' score.txt

区间模式:可以匹配一段连续的文本行

pattern1,pattern2

awk '/^Nancy/, $2==92 { print }' scores.txt

//输出包含匹配前后两个模式在内的文本行之间的所有行

BEGIN模式:

成立的时机为awk程序刚开始执行,但是又尚未读取任何数据之前,该模式对应的操作仅仅被执行一次,当awk读取数据之后,BEGIN模式便不再成立。

#! /bin/awk -f

BEGIN {

    FS="[\t:]"

    RS="\n"

    count=30

    print "the report ..."

}

END模式:

在awk命令处理完所有数据,即将退出程序时成立。

END {

    print "=========================="

    print "printing is over"

}  

4    变量

awk的变量名只能包括字母 数字 下划线,并且不能以数字开头,区分大小写。

awk中的变量类型分为两种,分别为字符串和数值。如果没有指定值,数值类型的变量默认值为0,字符串类型默认为空串。

BEGIN {

    x=3

    message="Hello" "world"

    print x

    print message

}

5    系统内置变量

$0:表示awk正在处理的记录

$n:当前记录的第n个字段的值

NF:当前记录的字段数

NR:表示已经读取的记录的数量

FS:用来表示字段分隔符,用户可以使用FS变量自定义当前数据文件的字段分隔符,awk会在处理文件数据前参考该变量的值来分隔记录中的各个字段。

RS:自定义数据文件中记录的分隔符,默认为换行符\n。


注:awk会在读取数据行之前通过FS及RS确定记录和字段的分隔符,然后进行记录和字段的分隔符,然后进行记录和字段的分隔。每读取一条记录之后,变量$0 $1 $2等变量都会自动更新。

6    记录分隔符和字段分隔符

指定记录分隔符:

eg1.

BEGIN {

    #定义记录分隔符

    RS=""

}


{

    print  #输出每行数据

    print "================================="

}

注:当将记录分隔符指定为空字符串时,awk会将多个连续的空白行看做一个单一的记录分隔符,也就是说,awk不会再将空白行作为一条空白记录。另外,awk也会忽略文件开头和末尾处的空行。

eg2.

BEGIN {

    #定义记录分隔符为空字符串

    RS=""

    #定义记录分隔符为换行符

    FS="\n"

}

{ print $1 }   

7    记录和字段的引用

用户可以使用系统变量来引用数据文件中的记录和字段。

awk每次只是读取一行文本,因此,在awk程序中记录和字段的引用都是针对当前记录来说的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值