一道shell命令笔试题
有一个日志文件access.log ,日志文件的格式: 127.0.0.1 - - [11/Jan/2013:15:26:19 +0800] "GET / HTTP/1.1" 403 202
用shell命令,计算出文件中每个ip访问的记录数 :
cat access.log | awk -F " " '{print $1}' | sort -rn | uniq -c
一、Sort命令
sort [OPTION]… [FILE]…
对文件按指定的域进行排序
常用选项:
- -c: 检测文件是否已经排序
- -m: 将两个已经排序的文件进行合并
- -u: 在排序过程中,删除重复的行
- -o: 保存排序后的文件
- -t: 域分隔符,默认为空格和tab
- -n: 指定待排序的域为数字类型
- -r: 逆序排序,默认为正向排序
- -b: 按域排序时忽略第一个空格
- +n: 按照第n个域进行排序,域从第0个开始计数
- +m.n: 按照第m个域的第n个字符开始开始排序
- -k: 按照第k个域进行排序,域从第1个开始计数
常见的用法例子: sort -o output.txt your_file.txt #对文件按第一域进行排序,将排序结果保存到output.txt sort -t: -r +2n your_file.txt #对文件按照第2个域进行逆向排序,第二个域为数字类型,同时分割符为: df | sort -b -r -k5 #按照磁盘的占用率从高到底进行排序输出
二、uniq命令
uniq [OPTION]… [INPUT [OUTPUT]]
从文件中去除或删除重复的行,在功能上和sort -u类似
常用选项:
- -u: 只显示不重复的行
- -d: 只显示重复的行
- -c: 打印每一行出现的次数
- -fn: 忽略前n个域
常用的用法例子: uniq sort_file.txt #删除文件中重复的行 uinq -c sort_file.txt #显示每行出现的次数 uinq -d sort_file.txt #只显示出现次数>=2的行
吸引力法则
每天进步一点点