ITPub博客

首页 > 应用开发 > IT综合 > awk 习题

awk 习题

原创 IT综合 作者:sgy618 时间:2011-05-26 15:53:52 0 删除 编辑

awk 习题

[@more@]

1.使用:符号做分隔符,将字段逆序输出/etc/passwd文件的每行
[root@ pub]# awk -F: '{for(i=NF;i>1;i--) printf "%s:",$i;print $i}' /etc/passwd

2.
# awk -F: 'NR < 11 {print $3,$1}' /etc/passwd > name.txt
# awk -F: 'NR < 11 {print $3,$6}' /etc/passwd > home.txt
# join name.txt home.txt
观察两个文件,以及join命令输出,用awk引入name.txt,home.txt两个文件,模拟joni命令的输出
[root@ awk]# awk '{ary[$1]=NR==FNR?$2:ary[$1]" "$2}END{for(i in ary) print i,ary[i]}' name.txt home.txt

3.统计/etc/passwd中每种shell的被使用人数
输出格式:
counts shell
1
1 /bin/sync
4 /bin/bash
31 /sbin/nologin
1 /sbin/halt
1 /sbin/shutdown
[root@ awk]# awk -F: '{ary[$NF]++}END{for(i in ary) print ary[i],i}' /etc/passwd
1
1 /bin/sync
18 /bin/bash
30 /sbin/nologin
1 /sbin/halt
1 /sbin/shutdown
[root@ awk]#

4.统计ps中VSZ,RSS各自总和
输出格式:
ps MEM statistic
VSZ_SUM : 164.277M
RSS_SUM : 47.8555M

[root@ awk]# ps aux | awk 'BEGIN{print "ps MEM statistic"}{V+=$5;R+=$6} END{print "VSZ_SUM: "V/1024"MnRSS_SUM: "R/1024"M"}'
ps MEM statistic
VSZ_SUM: 1870.04M
RSS_SUM: 370.203M
[root@ awk]#
5.计算/etc/passwd中所有用户的UID平均数,以及GID平均数.
输出格式:
UID and GID AVG
UID-AVG : 1750.72
GID_AVG : 1754
[root@ awk]# awk -F: '{U+=$3;G+=$4}END{print "U_avg: "U/NR"nG_avg: "G/NR}' /etc/passwd
U_avg: 1449.83
G_avg: 1452.65
[root@ awk]# awk -F: '{U+=$3;G+=$4;c++}END{print "U_avg: "U/c"nG_avg: "G/c}' /etc/passwd
U_avg: 1449.83
G_avg: 1452.65
[root@ awk]#
[root@ awk]# awk -F: '$0 !~ /^$/{U+=$3;G+=$4;c++}END{print "U_avg: "U/c"nG_avg: "G/c}' /etc/passwd
U_avg: 1449.83
G_avg: 1452.65
[root@ awk]#
6.
根据uid值给用户分等级 Admin system users
输出格式:

LEVEL NAME

Admin root
sysuser bin
users seker

admin_count: N sys_user_count: N users_count: N

[root@ awk]# awk -F: 'BEGIN{print "LEVELtNAME"}{if($3==0) { a++;print "admint"$1}else if ($3<500) { s++;print "sysusert"$1}else {u++;print "usert"$1}}END{print "admin: "a,"sysuser: "s,"users: "u}' /etc/passwd

7.用awk实现 tail -n 5 file 命令
[root@ awk]# awk '{if(NR%5==0){i=0};ary[++i]=$0}END{for(i=1;i<=5;i++) print ary[i]}' ./tmp.txt
8.
SHELL实现批量建立多个文件,将文件拓展名加上.txt,再加上.doc,再把中间的.txt去掉
[root@ dir]# for i in *;do mv $i $(sed 's/.txt//' <<< $i);done
[root@ dir]# ls
a_1.doc a_3.doc b_2.doc c_1.doc c_3.doc
a_2.doc b_1.doc b_3.doc c_2.doc
[root@ dir]#
9.
AWK脚本实现间隔五行打印表头
[root@mail ~]# ./awk_print.sh /etc/passwd
Username Uid
root 0
bin 1
daemon 2
adm 3
lp 4

Username Uid
shutdown 6
halt 7
mail 8
news 9
uucp 10

[root@ dir]# awk -F: 'BEGIN{print "Username Uid"}{if(NR%5==0)print ""$1"t"$3"nnUsername Uid";else print $1"t"$3}' /etc/passwd

awk_print.sh
debian:/home/sungy/myshell/sh# cat awk_print.sh
#! /usr/bin/awk -f

BEGIN{
printf "UsernametUidn"
}

{
printf "%-15s %-5sn",$1,$3
if(NR%5==0)
{
print "n"
}
}
debian:/home/sungy/myshell/sh#

10.用$RANDOM产生100个随机数,交给AWK产生数组,在数组内部排序,最后输出.(禁止用sort命令)

awk_rand.sh
#! /usr/bin/awk -f

BEGIN{
srand($RANDOM)
for(i=0;i<100;i++)
{
ary[i]=int(rand()*10000)
}

for(i=0;i<100;i++)
{
for(j=i+1;j<100;j++)
{
if(ary[i]>ary[j])
{
temp=ary[i]
ary[i]=ary[j]
ary[j]=temp
}
}
}

for(i=0;i<100;i++)
{
printf "%st",ary[i]
}

print "n"
}


11.
建立 aa.txt 文本
# cat aa.txt
aaa/bbb/ccc
ddd/eee/fff
ggg/hhh/iii
aaa/bbb/ccc/aaa/bbb/ccc/ddd/eee
# 用AWK或SED输出如下格式
ccc aaa/bbb/
fff ddd/eee/
iii ggg/hhh/
eee aaa/bbb/ccc/aaa/bbb/ccc/ddd/
[root@ dir]# sed -rn 's!(.*/)(.*)!2 1!p' aa.txt
ccc aaa/bbb/
fff ddd/eee/
iii ggg/hhh/
eee aaa/bbb/ccc/aaa/bbb/ccc/ddd/
[root@ dir]#

[root@ dir]# awk -F/ '{print $NF,gensub($NF"$","","g",$0)}' aa.txt
ccc aaa/bbb/
fff ddd/eee/
iii ggg/hhh/
eee aaa/bbb/eee/aaa/bbb/ccc/ddd/
[root@ dir]#


awk -F/ '{printf "%st",$NF ;for(i=1;i

12
建立 a.txt b.txt 文件
[root@tch254 ~]# cat a.txt
1 a
2 b
3 c
4 d
5 e
6 f
7 g

a.txt: ary[$1]=$2
ary[1]="a" ary[2]="b" ary[3]="c" ary[4]="d" ary[5]="e" ...
b.txt: ary[5] $2
ary[4] $2
ary[3] $2


[root@tch254 ~]# cat b.txt
5 ABC
3 DEF
4 XYZ
[root@tch254 ~]# 使用AWK处理两个文件输出如下结果
e ABC
c DEF
d XYZ
[root@tch254 ~]#

awk '{if(NR==FNR){ary[$1]=$2}else{print ary[$1]"t"$2}}' a.txt b.txt

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23168012/viewspace-1050396/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: cpio 命令
请登录后发表评论 登录
全部评论

注册时间:2010-01-12

  • 博文量
    104
  • 访问量
    396310