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]#