Shell脚本练手题
Data.txt 内容如下
11-Mar-2011  21:14:34.066  queries:  client  1.1.1.1#28752:  view  view_1:  query:  w1.test.com
11-Mar-2011  21:14:34.095  queries:  client  2.2.2.2#53:  view  view_2:  query:  w2.test.com
11-Mar-2011  21:14:34.095  queries:  client  1.1.1.1#19055:  view  view_1:  query:  w1.test.com
11-Mar-2011  21:14:34.095  queries:  client  2.2.2.2#62526:  view  view_2:  query:  w1.test.com
11-Mar-2011  21:14:34.095  queries:  client  1.1.1.1#14660:  view  view_2:  query:  w2.test.com
11-Mar-2011  21:14:34.095  queries:  client  1.1.1.1#37657:  view  view_2:  query:  w2.test.com
 
要求已去重的模式,倒叙的输出各个IP的出现次数(尽量已精简的方式实现)
 
Awk ‘{print $5}’ | cut –d “#” –f 1 |sort |uniq –c
 
 
 
 
有个文件file,其内容如下:
12 34 56 78
24 65 87 90
76 11 67 87
100 89 78 99
求出文本中数字的最大、小值
 
cat maxmin.txt |awk 'BEGIN{max=0} {for(i=1;i<=NR;i++)if($i>max) max=$i} END{print "Max="max}'
cat maxmin.txt |awk 'BEGIN{min=9999} {for(i=1;i<=NR;i++)if($i<min) min=$i} END{print "Min="min}'
 
 
 
 
有一个文件是QQ号到手机号的绑定关系,一行一个关系,格式如下:
cat file
11235334: 13443253456
11235335: 13443253457
11235336: 13443253458
11235333: 13443253458
11235336: 13443253459
11235334: 13443253452
要求统计出每个QQ绑定了几个手机,输出到一个文件里。格式如下:
[11235333] 1
 13443253458
[11235334] 2
 13443253456
 13443253452
[11235335] 1
 13443253457
[11235336] 2
 13443253458
 13443253459
 
cat 3.txt |sort -n |awk '{++S[$1]; X[$1]=X[$1]''"\n\t"''$2} END {for(a in S) print a,S[a] X[a]}'
 
 
 
 
#cat a                   #用户名,以及空间使用率
uid:quota_used_rate
chenmeng:35%
wangfurong:20%
luoxuan:40%
guofeifei:20%
lihui:70%
wangwei:66%
wuhuixiong:44%
shashijie:22%
#cat b                   #用户名,以及空间使用率
uid:quota_used
wuhuixiong:100m
guofeifei:500m
luoxuan:200m
wangfurong:99m
shashijie:250m
chenmeng:150m
lihui:88m
wangwei:34m
 
要求整理出chenmeng:35%:150m
awk -F":" '/chenmeng/{S[$1]; X[$1]=X[$1]":"$2} END{for(a in S)print a X[a]}' a.txt b.txt
 
 
 
 
 
 
cat fenhang.txt
A 2 3 5 0
B 2 3 6 0
C 2 3 6 0
 
要求分行
A 2
A 3
A 5
A 0
B 2
B 3
B 6
B 0
C 2
C 3
C 6
C 0
cat fenhang.txt |awk '{for(i=2;i<=NF;i++)print $1" "$i}'