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