awk基本用法
ls -l >> list.txt
输出第一列
awk '{print $1}' list.txt
输出第二列
awk '{printf %d\n,$2}' list.txt
输出第二行第一列
awk 'NR==2 {print $1}' list.txt
if语句
awk '{if(NR<=2){print $0}}' list.txt
Awk完整形式
awk 'BEGIN{print"start"} pattern{print} END{print "end"}'
其中BEGIN和END是可选模块, pattern里面每读一行执行一次,BEGIN在加载数据前执行,END在加载数据完成后执行。单引号是为了将awk命令与linux命令区分开。
Eg、输出字段数(NF->number of fileds)和行数(NR->numberof rows)
awk 'END{print NF,NR}' //在读入每一行的时,awk会将NR更新为对应的行号
-
- 提前遍历全文
-
awk 'BEGIN{while(getline<"file"){x+=$2+$3;i++};y=x/i}{if($2+$3>y)z++}END{print z}' file
拆分
ifconfig |awk '{if(NR==2){split($2,a,":");print a[2]}}'
统计次数
cat test
123.122.123.12 12121212
121.2332.121.11 232323
255.255.255.255 21321
123.122.123.12 12121212
123.122.123.12 1212121er2
123.122.123.12 12121212eer
123.122.123.12 12121212ere
255.255.255.255 21321
121.2332.121.11 232323
255.255.255.255 21321
命令
awk '{name[$1]++ }; END {for (count in name) print count,name[count]}' test|sort取字符前几位
awk脚本形式
eg:求学生平均成绩
zhangsan 80
lisi 81.5
wangwu 93
zhangsan 85
lisi 88
wangwu 97
zhangsan 90
lisi 92
wangwu 88
#!/bin/awk -f
BEGIN{
print "start"
}
{
a[$1]+=$2
b[$1]++
}
END{
for(i in b){
print i,a[i]/b[i]
}
print "end"
}
$0表示整行
输出前3列
ps -aux|grep java|awk '{i=1;while(i<3){printf $i;i=i+1;}print $i}'
浙公网安备 33010602011771号