Linux Shell经典面试题(其七)

Linux Shell经典面试题(其七)

参考:http://laoxu.blog.51cto.com/4120547/1285664

  1. 获取1-9的顺序的数字。
# 1. 类似seq 1 9或seq 9

$ for i in `seq 1 9`;do echo $i;done

# 2. 类似for i in {1..9};do echo $i;done

$ for ((i=1;i<=9;i++));do echo $i;done

# 3.

$ seq -s " " -w 9

# 4.

echo {1..9}
  1. 获取如下的数字输出
12345
1234
123
12
1
#!/bin/bash
a={1..5}
for i in {5..1}
do
    echo ${a[*]:0:$i}
done
  1. 获取如下数字输出。
55555
4444
333
22
1
#!/bin/bash
for ((i=5;i>=1;i--))
do
    for ((j=1;j<=i;j++))
    do
        echo -n "$i"
    done
    echo ""
done
  1. 输出26272829303132333435
$ echo 2{6..9} 3{0..5}
  1. 倒序输出数字9-1
$ echo {9..1}

$ seq -s " " 9 -1 1
  1. s输出0-36之间的奇数
$ seq -s " " 1 2 36
  1. 输出0-36之间的偶数
$ seq -s " " 0 2 36
  1. 输出以三位数字表示的0-100
# 1.
$ printf "%03d " {0..100};echo

# 2.
$ echo {000..100}

# 3.
$ seq -s " " -w 0 100

# 4.
$ awk 'BEGIN{for (i=0;i<=100;i++)printf("%03d",i)}'

# 5.
$ for ((i=0;i<=100;i++));do printf "%03d" ¥i;done
  1. 有一个文本(文件名user),格式如下:
Leo:456:7890:11
Vincent:333:43434:2
Rack:4343:4343:222
Leo:444:33:4343
Rack:1:1:1
Tiger:1:32:4

要求:
1>.提取第二列的所有值,并对其排序。
2>.计算第二列总和。
3>.找出第二、三和四列之和的最大值。
4>.假如有一百万个这样的文本(user文本),每个文本大小为500M,用最快的方式统计哪个用户(第一列)的后面三列(第2,3和4列)之和最大。[注]可以使用shell脚本或者java语言实现以上功能。

# 1>答案如下:
awk -F: '{print $2}' user | sort -nr

# 2>答案如下:
awk -F: '{print $2}' user | awk '{ s += $1 } END { print "sum =",s}'

# 3>答案如下:

# shell脚本sh compare.sh

#!/bin/bash
a=`awk -F: '{print $2}' user | sort -n | awk '{ s += $1 } END { print s}'`
b=`awk -F: '{print $3}' user | sort -n | awk '{ s += $1 } END { print s}'`
c=`awk -F: '{print $4}' user | sort -n | awk '{ s += $1 } END { print s}'`
if [ $a -gt $b ]
        then big=$a
 else big=$b
fi
if [ $big -gt $c ]
        then echo $big
else echo $c
fi

# 4>思路如下:
// 需要用java实现,hadoop的mapreduce,shell脚本很难很难实现15PB的大数据分析,除非拆分后统计再合并结果,效率非常低。
  1. 下面是nginx的error log日志格式,统计出日志中频次最多的10个ip地址。(linux shell实现)
2016/09/04 22:49:09 [info] 100628#0: *2484247857 client 222.209.36.221 closed keepalive connection
2016/09/04 22:49:09 [info] 100630#0: *2484247829 client 111.7.170.139 closed keepalive connection
2016/09/04 22:49:09 [info] 100630#0: *2484247821 client 218.5.167.236 closed keepalive connection
2016/09/04 22:49:09 [info] 100630#0: *2484247840 client 101.81.231.92 closed keepalive connection
2016/09/04 22:49:09 [info] 100624#0: *2484251224 client 110.231.191.199 closed keepalive connection
2016/09/04 22:49:09 [info] 100624#0: *2484251198 client 116.231.232.56 closed keepalive connection
2016/09/04 22:49:09 [info] 100630#0: *2484247835 client 119.131.77.206 closed keepalive connection
# linux shell执行命令如下

$ awk '{c[$7]++}END{for(i in c) print i,c[i]}' | sort -k2 -nr | head 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值