awk

20190314-065245.jpg
  • tip

awk经过改进生成的新的版本nawk,gawk. linux下是gawk

  • 格式
    awk [options] command file(s)
    awk -f awk-script-file file(s)
    • command = pattern {awk操作命令}
      • pattern: 正则表达式;逻辑判断式
      • awk操作命令:
        • 内置函数:print() printf() getline()..
        • 控制指令:if(){..}else{..}; while(){..};
    • options
      • options: -F field-separator(默认为空格)
        awk -F ':' '{print $3}' /etc/passwd

  • awk内置变量
    • $0:表示整个当前行
    • $1:每行第一个字段
    • $2:每行第二个字段
    • NR:每行的记录号
    • NF:字段数量变量
    • FILENAME:正在处理的文件名

  • 案例
    awk -F ':' '{printf("Line:%3s Col:%s User:%s\n",NR,NF,$1)}' passwd
    awk -F ':' '{if ($3>100) print "Line: "NR,"User: "$1}' passwd

sed '/Error/p' fresh.log | awk '{print $1}'
awk '/Error/{print $1}' fresh.log


  • awk逻辑
    ~,!~:匹配正则表达式
    ==,!=,<,>:判断逻辑表达式

awk -F ':' '$1~/^m.*/{print $1}' passwd
awk -F ':' '$3>100{print $1,$3}' passwd
awk -F ':' '$3==100{print $1,$3}' passwd
awk -F ':' '$3!=100{print $1,$3}' passwd


  • windows下练习
# 打印ip
ipconfig | sed -n "/IPv4.*/p" | awk -F ":" "{print $2}"
ipconfig | awk -F ":" "/IPv4/{print $2}"

  • awk扩展格式
    BEGIN{}{}END{}

awk -F ':' 'BEGIN{print "Line Col User"}{print NR,NF,$1}END{print"----"FILENAME"---"}' passwd

ls -l | awk 'BEGIN{size=0}{size+=$5}END{print " size is " size}'

awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print " count = "count}' passwd

awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print " count= "count}' passwd

awk -F ':' 'BEGIN{count=0}{if ($3>100) name[count++]=$1}END{for (I=0;i

netstat -anp | awk '$6~/CONNECT|LISTEN/{sum{$6}++}END{for (i in sum) print i,sum[i]}'

你可能感兴趣的:(awk)