awk 一些题目
1.1. 输出记录最多的IP
[腾讯面试题]:一个文本类型的文件,里面每行存放一个登陆者的IP(某些行是重复的),写一个shell脚本输出登陆次数最多的用户。
Ip_input.txt的内容假设如下:
219.217.49.14
175.43.4.87
87.48.98.1
59.73.38.25
219.217.50.14
59.92.48.32
219.217.49.14
59.72.38.142
59.73.38.25
219.217.49.14
#! /bin/bash
# test.sh
sort ip_input | uniq -c | sort | tail -1 | awk '{print $2}' 或者:
sort ip_input | uniq -c | sort -r | head -1 | awk '{print $2}'
uniq -c 选项。它的作用是将重复行去掉并且在每行的前面添加此行重复的次数
sort命令的默认排序方式是升序,使用 -r 选项逆序排序结果,则出现次数最多的IP则排在了第一行
1.2. 处理一下文件内容,将域名取出并进行计数排数,如处理:
http://www.baidu.com/index.html
http://ww.baidu.com/1.html
http://www.baidu.com/2.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html
得到如下结果:域名的出现次数,域名
4 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com
shell程序如下:
方法一:
#cat file | sed -e 's/http:\/\///' -e 's/\/.*//'| sort | uniq -c | sort -nr | head -10
sort -n 依照数值的大小排序。
方法二:
#awk -F/ '{print $3}' file|sort -r|uniq -c|awk '{print $1 "\t",$2}'
1.3. 从a.log文件中提取包含"WARNING"或"FATAL",同时不包含"IGNOR"的行,然后提取以":"分割的第5个字段.
grep -E 'WARNING|FATAL' file|grep -v 'IGNOR'|awk -F: '{print $5}'
1.4. 在shell环境中,如何查看远程Linux系统运行了多少时间?
ssh user@被监控的主机ip "uptime"|awk '{print $3,$4}'
1.5. 腾讯一shell试题.
假设qq.tel文件内容:
12334:13510014336
12345:12334555666
12334:12343453453
12099:13598989899
12334:12345454545
12099:12343454544
分类如下:
[12334]
13510014336
12343453453
...........
[12099]
13598989899
12343454544
............
实现如下:
cat qq.tel|sort -r |awk -F: '{if(tmp!=$1) {tmp=$1;print "["tmp"]"} print $2}'
cat e | sort -r | awk -F: '{if(head!=$1){print $1;head=$1;} print $2} '