两道简单而不简单的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 下面,只依本题来看,可以做如下解法:
1sed -i '2r b' a
这样似乎又有些不妥,这样的话是根据行数,来判断插入到那里,如果行数太多的话,难道要一行一行的去数,可以把写法改是这样:sed -i '/b/r b' a
。当然,成能编辑器vi里操作也可以,打开a文件光标移到第二行,敲: r b就行了
题目2:
内容如下:
1[root@localhost ~]# cat test
2zhangsan 80
3lisi 81.5
4wangwu 93
5zhangsan 85
6lisi 88
7wangwu 97
8zhangsan 90
9lisi 92
10wangwu 88
11要求输出格式:(average:平均成绩,total:总成绩)
12name#######average#######total
13zhangsan xxx xxx
14lisi xxx xxx
15wangwu xxx xxx
大家来做做,越精简越好,呵呵。。。
繁琐易理解的方法:
1echo -e "nametaveragettotal"
2for i in `awk '{print $1}' 1.txt|sort |uniq`
3do
4a=`grep $i 1.txt|awk '{print $NF}'|awk '{tot +=$1};END{print tot}'`
5b=`grep $i 1.txt|awk '{print $NF}'|awk '{tot +=$1};END{print tot/2}'`
6echo -e "$it$bt$a"
7done
呵呵,是不是可以更简单点:
1awk '{a[$1]+=$2;b[$1]++};END{for(i in a)print i,a[i]/b[i],a[i]}' test.txt
2规范下格式
3awk '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
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/shell-mianshi/327.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.