awk是一个强大的文本分析工具,它把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

使用方法   : awk ‘{pattern + action}’ {filenames}

awk内置变量

ARGC               命令行参数个数

ARGV               命令行参数排列

ENVIRON           支持队列中系统环境变量的使用

FILENAME           awk浏览的文件名

FNR                浏览文件的记录数

FS                设置输入域分隔符,等价于命令行 -F选项

NF                浏览记录的域的个数

NR                已读的记录数

OFS                输出域分隔符

ORS                输出记录分隔符

RS                控制记录分隔符$0变量是指整条记录。

$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。

<例>

统计CSV文件 不是7个项目的行数

[root@localhost usr2]# more test.dat
172.95.xx.xxx ,A1111,11110100000111,10000011,20200914000000,381b76cac71857695ad3eecacebd83e6147ad762,1,
172.95.xx.xxx ,A1111,11110100000111,10000011,20200914000000,381b76cac71857695ad3eecacebd83e6147ad762,1
172.95.xx.xxx ,A1111,11110100000111,10000011,20200914000000,381b76cac71857695ad3eecacebd83e6147ad762,
172.95.xx.xxx ,A1111,11110100000111,10000011,20200914000000,381b76cac71857695ad3eecacebd83e6147ad762,1,2
172.95.xx.xxx ,A1111,11110100000111,10000011,20200914000000,381b76cac71857695ad3eecacebd83e6147ad762,1,2,
172.95.xx.xxx ,A1111,11110100000111,10000011,20200914000000,
172.95.xx.xxx ,A1111,11110100000111,10000011,20200914000000
[root@localhost usr2]# awk -F "," '{ if(NF != 7){errorcnt++;}} END{print errorcnt} ' test.dat
5
[root@localhost usr2]# awk ' BEGIN { FS="," } { if(NF != 7){errorcnt++;} } END { print errorcnt } ' test.dat
5
[root@localhost usr2]#