1.基本用法:
cat ljm.txt |awk -F '|' '{if($1==0) print($o)}'
↑ 将ljm.txt 按 | 分隔(多个分隔符使用[],写在里面) 第一列为0的行 打印
2.逻辑运算符&&、 || 、!
cat ljm.txt |awk -F '|' '{if($1==0&&$2==1||$3!=1) print($o)}'
3.文件名,行号,字段个数,完整内容:
awk -F ':' '{print "文件名:" FILENAME ",行数:" NR ",列数:" NF ",整行内容:"$0}' ljm.txt
4.正则表达过滤
cat ljm.txt |awk -F '|' '{ ct+=1}{if($1~/^[0-9]+$/) print($o)}'
↑ ^表示此后内容作为开头、[0-9]表示一个0到9之间的数字、+表示0至多个不限个数、$表示此前内容作为结尾,即取第一列整数的行
cat ljm.txt |awk -F '|' '{ ct+=1}{if($1~/^[0-9]+\.[0-9][0-9]+$/) print($o)}' |wc -l
↑取第一列精确到两位小数以上的行
awk -F '|' '{if($8~/^99/) print$8}' 第八个字段以99开头
awk -F '|' '{if($8~/.*99.*/) print$8}' 第八个字段带99
awk -F '|' '{if($8~/99$/) print$8}' 第八个字段以99结束
5.取最大值
取字段最小值
more ljm.txt|awk -F '|' 'NR==1{min=$3;next}{min=min<$3?min:$3}END{print min}'
取字段最大值
more ljm.txt|awk -F '|' 'NR==1{max=$3;next}{max=max>$3?max:$3}END{print max}'
6.保留唯一值
| awk -F '|' '{a[$1]++;} END{for(i in a) {if( a[i]>1 )printi" "a[i]}}'
7.某一列求和
|awk -F 'M' '{sum+=$1} END {print "Sum = ", sum}'
统计非空行数
awk 'BEGIN {count=0} $0 !~ /^$/ {count += 1} END {print "Not empty line count " count}'
目录下文件大小总和
ls -l | awk 'BEGIN {size=0} {size+=$5} END {print "Size is " size}'
8.操作进程
ps -A -o stat,ppid,pid,cmd |grep -e '^[Zz]' |awk '{print$2}'|xargs -i kill -9 {}
杀死僵尸进程
ps -A -o stat,ppid,pid,cmd |grep -e '^[T]' |awk '{print$2}'|xargs -i kill -9 {}