uniq-sort-awk
2024-08-27 10:24:48
题目:[百度搜狐面试题] 统计url出现次数
oldboy.log http://www.etiantain.org/index.html http://www.etiantain.org/1.html http://post.etiantain.org/index.html http://mp3.etiantain.org/3.html http://www.etiantain.org/1.html http://post.etiantain.org/2.html uniq - report or omit repeated lines
去除相邻的重复的行
[root@moban data]# cat ip.txt 10.0.0.9 10.0.0.8 10.0.0.7 10.0.0.7 10.0.0.8 10.0.0.8 10.0.0.9 [root@moban data]# uniq ip.txt 10.0.0.9 10.0.0.8 10.0.0.7 10.0.0.8 10.0.0.9 让重复的行相邻 [root@moban data]# sort ip.txt 10.0.0.7 10.0.0.7 10.0.0.8 10.0.0.8 10.0.0.8 10.0.0.9 10.0.0.9 [root@moban data]# sort ip.txt |uniq 10.0.0.7 10.0.0.8 10.0.0.9 [root@moban data]# sort -u ip.txt 10.0.0.7 10.0.0.8 10.0.0.9 -u, --unique with -c, check for strict ordering; without -c, output only the first of an equal run [root@moban data]# sort ip.txt |uniq -c 10.0.0.7 10.0.0.8 10.0.0.9 uniq:-c 计数 -c, --count prefix lines by the number of occurrences [root@moban data]# awk -F / '{print $3}' url.txt www.etiantain.org www.etiantain.org post.etiantain.org mp3.etiantain.org www.etiantain.org post.etiantain.org
解答:
[root@moban data]# awk -F / '{print $3}' url.txt|sort|uniq -c mp3.etiantain.org post.etiantain.org www.etiantain.org 降序排序: 法1: [root@moban data]# awk -F / '{print $3}' url.txt|sort|uniq -c|sort -r www.etiantain.org post.etiantain.org mp3.etiantain.org 法2:cut [root@moban data]# cut -d / -f3 url.txt |sort|uniq -c|sort -r www.etiantain.org post.etiantain.org mp3.etiantain.org 优化: [root@moban data]# cut -d / -f3 url.txt |sort -r|uniq -c www.etiantain.org post.etiantain.org mp3.etiantain.org 排序: sort –rn [root@lanny test]# cat ip.txt 10.0.0.9 o 10.0.0.9 a 10.0.0.8 z 10.0.0.8 k 10.0.0.8 c 10.0.0.7 n 10.0.0.7 f 对第二列排序 -t 分隔符 –k 第几列 [root@lanny test]# sort -t " " -k2 ip.txt 10.0.0.9 a 10.0.0.8 c 10.0.0.7 f 10.0.0.8 k 10.0.0.7 n 10.0.0.9 o 10.0.0.8 z 分隔符默认是空格,因此 –t 可以省略 [root@lanny test]# sort -k2 ip.txt [root@lanny test]# sort -rk2 ip.txt #倒序排列 -t 表示按点号分隔域 类似awk的-F,取字段用$ $2或cut的-d,取字段f数字. sort –runtk -r 倒序 –u 去重 –n数字 -t分隔 –k 第几行 uniq –c 题目:要求对ip的第三列降序排序,如果第三列相同,那就第四列按照降序排序. [root@lanny test]# cat arp.txt 192.168.0.3 :e0:4c::d2:a5 192.168.2.2 :e0:4c::d1:7d 192.168.3.7 ::bf::: 192.168.3.5 :e0:4c::a3: 192.168.2.4 :0a:eb:6d:: 192.168.1.2 ::6c::: 192.168.4.9 :0a:e6:b5:d1:4b 192.168.0.4 :0e:1f::: 192.168.6.7 :1d:::b2:e1 192.168.8.4 ::6c::5d: 192.168.1.22 :e0:4c::ce: 192.168.0.15 :e0:4c::d7:0e 192.168.2.9 :e0:4c::d1:8b 192.168.0.122 ::ec:c5:: 192.168.9.115 ::6c::f7: 192.168.7.111 :::b6:6e:a9 sort -t. -k3.,.1nr -k4.,.3nr arp.txt -k多少列 -k3.,3.3 第三列第一个字符到第三列第一个字符 -k4.,4.3 第四列第一个字符,第四列第三个字符 [root@lanny test]# sort -t. -k3.,.1nr -k4.,.3nr arp.txt 192.168.9.115 ::6c::f7: 192.168.8.4 ::6c::5d: 192.168.7.111 :::b6:6e:a9 192.168.6.7 :1d:::b2:e1 192.168.4.9 :0a:e6:b5:d1:4b 192.168.3.7 ::bf::: 192.168.3.5 :e0:4c::a3: 192.168.2.9 :e0:4c::d1:8b 192.168.2.4 :0a:eb:6d:: 192.168.2.2 :e0:4c::d1:7d 192.168.1.22 :e0:4c::ce: 192.168.1.2 ::6c::: 192.168.0.122 ::ec:c5:: 192.168.0.15 :e0:4c::d7:0e 192.168.0.4 :0e:1f::: 192.168.0.3 :e0:4c::d2:a5 题目:[百度搜狐面试题] 统计url出现次数 ---awk解决 oldboy.log http://www.etiantain.org/index.html http://www.etiantain.org/1.html http://post.etiantain.org/index.html http://mp3.etiantain.org/3.html http://www.etiantain.org/1.html http://post.etiantain.org/2.html 数组: [root@lanny test]# awk 'BEGIN{array[1]="lanny";array[2]="oldlanny";for(key in array) print key,array[key]}' lanny oldlanny t2.awk #!/bin/awk BEGIN{ array[]="lanny" array[]="oldlanny" for(key in array) print key,array[key] } 解析:begin定义,表示初始化数组 [root@lanny test]# awk -f t2.awk lanny oldlanny [root@lanny test]# ./t2.awk #加了权限后可以这样执行 -f 从文件读 另一种方式: 提供BEGIN和END的作用是给程序赋予初始状态和在程序之后执行一些扫尾的工作. 任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行.因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果. 将数组输出 [root@lanny test]# awk 'BEGIN{array[1]="lanny";array[2]="oldlanny";}END{for (key in array) print key,array[key]}' /etc/hosts #没什么实在意义,只不过写法需要数据流, begin 初始化,end 处理. lanny oldlanny [root@lanny test]#cat /etc/hosts | awk 'BEGIN{array[1]="lanny";array[2]="oldlanny";}END{for (key in array) print key,array[key]}' 将文件内容输出为数组 [root@lanny test]# awk 'BEGIN{array[1]="lanny";array[2]="oldlanny";}END{for (key in array) print key,array[key]}' /etc/hosts > awk.log [root@lanny test]# cat awk.log lanny oldlanny 把第一列做为下标,第二列做为值输出.放入S[]输出 [root@lanny test]# awk '{S[$1]=$2}END{for(k in S) print k,S[k]}' awk.log lanny oldlanny
最新文章
- Android开发学习——SQLite数据库与单元测试
- Android 进程常驻----native保活5.0以下方案推演过程以及代码
- html、css、javascript、JSP 、xml学习顺序应该是怎样的呢?
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记
- wx.html2.WebView在 target=";_blank"; or rel=";external"; 没有反映的解决方法
- [BS-18] 对OC中不可变类的理解
- 28335 AD 转换
- erl0001-Erlang 设计原则 process port io
- Java-IO 输入输出流详解
- JSP-tag文件使用介绍
- Jquery中删除元素方法
- Win7如何添加局域网内的网络打印机
- javascript函数的基础功能
- CXF 调用C#.net的WebService
- c# winform读取xml创建菜单
- easyUI progressbar组件
- Java开源博客My-Blog(SpringBoot+Docker)系列文章
- python打印电脑串口的信息
- 关于Unity3D使用时Scene视图清楚,Game视图不清楚的问题
- JavaScript 加解密库(crypto-js)
热门文章
- NodeJS: 处理request网页乱码问题
- App开发流程之源代码Git管理
- 查看一个软件ipa包的内容
- 我为什么用 SQLite 和 FMDB 而不用 Core Data
- Swift 中的函数
- androidannotation study(1)---Activity, Fragment,Custom Class &; Custom View
- Web Farm 和Web Garden
- linux下RTNETLINK answers: File exists的解决方案
- xamarin.android 沉浸式状态栏
- On Perseverance