linux shell题目,两道简单而不简单的shell题目

偶然的一次从linuxtone上看到的两个题目,据说是百度的面度题目,看起来挺有意思的,现摘录下来供大家玩味下:

题目1:

a文件内容a a a a

b b b b

c c c c

b文件内容1 1 1 1

2 2 2 2

3 3 3 3

将b文件内容插入到a文件内容的b b b b 下面,只依本题来看,可以做如下解法:sed -i '2r b' a

这样似乎又有些不妥,这样的话是根据行数,来判断插入到那里,如果行数太多的话,难道要一行一行的去数,可以把写法改是这样:sed -i '/b/r b' a

当然,成能编辑器vi里操作也可以,打开a文件光标移到第二行,敲: r b就行了

题目2:

内容如下:[root@localhost ~]# cat test

zhangsan 80

lisi 81.5

wangwu 93

zhangsan 85

lisi 88

wangwu 97

zhangsan 90

lisi 92

wangwu 88

要求输出格式:(average:平均成绩,total:总成绩)name#######average#######total

zhangsan xxx xxx

lisi xxx xxx

wangwu xxx xxx

大家来做做,越精简越好,呵呵。。。

繁琐易理解的方法:echo -e "nametaveragettotal"

for i in `awk '{print $1}' 1.txt|sort |uniq`

do

a=`grep $i 1.txt|awk '{print $NF}'|awk '{tot +=$1};END{print tot}'`

b=`grep $i 1.txt|awk '{print $NF}'|awk '{tot +=$1};END{print tot/2}'`

echo -e "$it$bt$a"

done

呵呵,是不是可以更简单点:awk '{a[$1]+=$2;b[$1]++};END{for(i in a)print i,a[i]/b[i],a[i]}' test.txt

规范下格式awk 'BEGIN{print "name average total"}{a[$1]+=$2;b[$1]++};END{for(i in a)print i"t"a[i]/b[i]"t"a[i]}' test.txt|column -t

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值