fendou00sd 2020-01-06
awk ‘pattern + {action}‘ file
单引号‘‘是为了和shell命令区分开; 大括号{ }表示一个命令分组; pattern是一个过滤器,表示匹配pattern条件的行才进行Action处理; action是处理动作,常见动作为Print; 使用#作为注释,pattern和action可以只有其一,但不能两者都没有。
FS 分隔符,默认是空格; OFS 输出分隔符; NR 当前行数,从1开始; NF 当前记录字段个数; $0 当前记录; $1~$n 当前记录第n个字段(列)。
gsub(r,s):在$0中用s代替r; index(s,t):返回s中t的第一个位置; length(s):s的长度;? match(s,r):s是否匹配r; split(s,a,fs):在fs上将s分成序列a; substr(s,p):返回s从p开始的子串。
++ -- 增加与减少( 前置或后置); ^ ** 指数( 右结合性); ! + - 非、一元(unary) 加号、一元减号; + - * / % 加、减、乘、除、余数; < <= == != > >= 数字比较; && 逻辑and; || 逻辑or; = += -= *= /= %= ^= **= 赋值。
if(condition) { } else { }; while { }; do{ }while(condition); for(init;condition;step){ }; break/continue。
df -h|awk ‘{print $1}‘
awk -F ‘[ :\t;]‘ ‘{print $1}‘ jfedu.txt
awk -F: ‘{print $1 >>"/tmp/awk.log"}‘ jfedu.txt
awk ‘NR==3,NR==5 {print}‘ jfedu.txt awk ‘NR==3,NR==5 {print $0}‘ jfedu.txt
awk ‘NR==3,NR==5 {print $1,$NF}‘ jfedu.txt
awk ‘length($0)>80 {print NR}‘ jfedu.txt
awk -v STR=hello ‘{print STR,$NF}‘ jfedu.txt STR="hello";echo| awk ‘{print "‘${STR}‘";}‘ (8) AWK以冒号切割,打印第一列同时只显示前5行: cat /etc/passwd|head -5|awk -F: ‘{print $1}‘ awk -F: ‘NR>=1&&NR<=5 {print $1}‘ /etc/passwd
cat jfedu.txt |awk ‘{sum+=$1}END{print sum}‘
awk -F: ‘NR%2==0 {next} {print NR,$1}‘ /etc/passwd
ifconfig eth0|grep "Bcast"|awk ‘{print "ip_"$2}‘
echo 3 2 1 | awk ‘{ if(($1>$2)||($1>$3)) { print $2} else {print $1} }‘
awk -F ‘:‘ ‘BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i =0; i < NR; i++) print i, name[i]}‘ /etc/passwd
awk ‘{if ($9~/502|499|500|503|404/) print $1,$9}‘ access.log|sort|uniq –c|sort –nr | awk ‘{if($1>20) print $2}‘
netstat -an | awk ‘/tcp/ {s[$NF]++} END {for(a in s) {print a,s[a]}}‘ netstat -an | awk ‘/tcp/ {print $NF}‘ | sort | uniq -c