awk的使用

awk命令是一种编程语言,用于在linux/unix下对文本和数据进行处理而且它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。

cat jj.txt

1 123  aa
2 123  bb
3 333  cc
4 4443 dd
5 555  ee
a 111  jj
b 222  zz
c 333  xx
d 444  cc
jjy  yyy
asd  lll
zxc  mmm

awk的正则表达式模式用斜线 // 包含起来,比如下面:要查看显示包含3的打印出来(print打印 $0 是显示所有行)

awk  '/3/ {print $0}' jj.txt 

如果要显示包含3的每条记录的第一行和第二行使用:

awk '/3/ {print $1,$2}' jj.txt

如果要显示数字1-3开头的 并且打印第一行使用:

awk '/^[1-3]/ {print $1}' jj.txt

关系表达式模式通常用于匹配特定字段或变量的内容。 常用的关系运算符有:

~:包含
!~:不包含
>:大于
:小于
>=:大于等于
:小于等于
=:等于
!=:不等于

比如使用 ~包含,显示第二字段包含3的打印出来所有

awk  '$2 ~ /3/ {print $0}' jj.txt

显示第二字段不包含3的打印出来所有:

awk  '$2 !~ /3/ {print $0}' jj.txt

显示从jjy 到 asd 的所有:

awk '/jjy/,/asd/ {print $0}' jj.txt

范围模式也可以使用关系表达式,例如,显示第2个字段等于100到第四个字段等于100 的记录:

awk '$2 == 100 , $4 == 100 {print $0}' jj.txt

BEGIN模式通常用于设置变量,END模式用于处理统计的数据。例如,下面将显示“this is my.”,然后显示第三个字段,最后显示”stop stop.”:

awk 'BEGIN {print "this is my"};{print $1};END{print "stop stop"}' jj.txt

awk有很多内置变量,允许控制程序的处理方式。下面是一些常见的内置变量

NF:记录中的字段数
NR:当前记录的编号
FILENAME:当前正在处理的输入文件名称
FS:字段分隔符
RS:记录分隔符
OFS:输出字段分隔符
ORS:输出记录分隔符

awk 'END {print "File",FILENAME,"contains",NR,"lines"}' jj.txt

File:文件 FILENAME:文件名称 contains :包含 NR:多少行

打印出的内容:

File jj.txt contains 12 lines