[root@localhost ~]# awk -F: 'NR%2==1 {print $1,$3}' /etc/passwd
root 0
daemon 2
lp 4
shutdown 6
mail 8
games 12
nobody 99
dbus 81
postfix 89
sshd 74
tss 59
mary 1001
boddy 1003
k1 1008
k3 1010
bash 1041
basher 1043
asd 1045
haha 1047
xixi 1049
[root@localhost ~]# awk -F: '$3 > 1000 {print $1,$3}' /etc/passwd
mary 1001
alice 1002
boddy 1003
alic 1007
k1 1008
k2 1009
k3 1010
ads 1011
bash 1041
testbash 1042
basher 1043
nologin 1044
asd 1045
test 1046
haha 1047
hehe 1048
xixi 1049
enen 1050
[root@localhost ~]# awk -F: '$7 ~ /\/bin\/bash/{print $1}' /etc/passwd
root
liao
mary
alice
alic
k1
k2
k3
ads
bash
testbash
basher
asd
test
haha
hehe
xixi
enen
[root@localhost ~]# awk -F: '$3 > 1000 {print NR | "wc -l" }' /etc/passwd
18
[root@localhost ~]# awk -F: '{print NR | "wc -l" }' /etc/passwd
40
[root@localhost ~]# awk -F: 'END{print FILENAME }' /etc/passwd
/etc/passwd
[root@localhost ~]# awk -F: '$3 == 1000 {print $0 }' /etc/passwd
liao:x:1000:1000:LIAO:/home/liao:/bin/bash
[root@localhost ~]# awk -F: 'END{print $0 }' /etc/passwd
enen:x:1050:1052::/home/enen:/bin/bash
1.统计tcp的链接数
# 将网卡信息作为awk的输入
netstat -ant | awk '
# 过滤出以tcp开头的行
/^tcp/
# 定义一个数组,键为每一行的最后一个字段,从0读起,每读到一次值加1
{++state[$NF]}
# 定义一个变量key,在数组中遍历,打印key读取到的键,以及键对应的值
END {for(key in state) print key,"\t",state[key]}'
2.分别统计不同ip的tcp连接
# 将网卡信息作为awk的输入
netstat -ant | awk '
# 过滤出以tcp开头的行
/^tcp/
# 在过滤出来的行中,取倒数第二个字段作为字符串,:作为分隔符对字符串进行拆分,将数组名取为array
{
n=split($(NF-1),array,":")
# 如果字符串拆分后字段总数小于等于2,那么将第一个字段作为数组S的键,每读到这个键的时候值便加1
if(n<=2)
++S[array[(1)]]
# 如果字符串拆分后字段总数大于2,那么将第四个字段作为数组S的键,每读到这个键的时候值便加1
else
++S[array[(4)]]
# 将每一行的最后一个字段作为数组s的键,每读一次加1,变量N每读一行加1
++s[$NF]
++N
}
# 使变量a在数组S中遍历,读取键以及键对应的值,格式化输出,指定a左对齐,且占用20个空格,a的值默认右对齐,每打印一行I加1
END {
for(a in S){
printf("%-20s %s\n", a, S[a])
++I
}
# 格式化输出,对IP总数进行统计
printf("%-20s %s\n","TOTAL_IP",I)
# 同理,对s数组的键与值进行输出以及统计。
for(a in s) printf("%-20s %s\n",a, s[a])
printf("%-20s %s\n","TOTAL_LINK",N)
}
[root@localhost ~]# awk 'BEGIN{OFS=":"}NR==FNR{test[NR]=$1}NR!=FNR{print $1,test[FNR]}' /tmp/test2 /tmp/test1
haha:20
hehe:25
alice:18
bob:30
001|100|abc.gif
002|80|abd.jpg
003|150|abe.gif
001|60|abf.gid
003|30|abg.jpg
#找出所有gif图片请求的所有号码
[root@localhost ~]# awk -F"|" '/gif$/{print $1 | "sort -u" }' /tmp/test3
001
003
#找出所有gif图片请求的号码和其对应的请求大小总和及请求数总和.
[root@localhost ~]# awk -F"|" 'BEGIN{print "num con sum"}/gif$/{++count[$1];sum[$1]+=$2}END{for(i in count)print i,":",count[i]," ",sum[i]}' /tmp/test3
num con sum
003 : 1 150
001 : 2 160
#找出所有gif图片请求的号码,并按照其请求大小总和从大到小排序
[root@localhost ~]# awk -F"|" 'BEGIN{print "num con sum"}/gif$/{++count[$1];sum[$1]+=$2}END{for(i in count)print i,":",count[i]," ",sum[i] | "sort -k3 -rn" }' /tmp/test3
num con sum
001 : 2 160
003 : 1 150
#找出所有gif图片请求的号码,并按其请求平均图片大小从大到小排序.
[root@localhost ~]# awk -F"|" 'BEGIN{print "num con sum avg"}/gif$/{++count[$1];sum[$1]+=$2}END{for(i in count)print i,":",count[i]," ",sum[i],"",sum[i]/count[i] | "sort -k3 -rn" }' /tmp/test3
num con sum avg
001 : 2 160 80
003 : 1 150 150