Linux-计数排序企业级应用-uniq-sort

1. uniq-报告或者忽略重复的行

默认只对相邻的相同行去重只有一个参数最常用一般和sort命令配合使用用来统计重复行的次数。

NAME
    uniq- report or omit repeated lines
SYNOPSIS
    uniq[OPTION]... [INPUT [OUTPUT]]
常用参数
-c, --count   
    #统计次数会把重复出现行的次数统计好打印到每一行的前面

实例1.1 统计相同内容重复出现的次数

1.1.1 模拟数据

cat >chen.txt<<EOF
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
EOF

1.1.2 觖法

1.1.2.1 思路

  • sort命令可以排序
  • uniq命令可以报告重复行的次数-c参数搞定。
  • sortchen.txt|uniq -c

1.1.2.2 默认只对相邻的相同行去重

[[email protected] ~]# uniq chen.txt
10.0.0.9
10.0.0.8
10.0.0.7
10.0.0.8
10.0.0.9

1.1.2.3 让重复的行相邻

[[email protected] ~]# sort chen.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

1.1.2.4 统计相同行重复出现的次数

[[email protected] ~]# sortchen.txt|uniq -c   #count 
      210.0.0.7
      310.0.0.8
      210.0.0.9

~两条命令的效果是一样的

[[email protected] ~]# sort chen.txt |uniq
10.0.0.7
10.0.0.8
10.0.0.9
[[email protected] ~]# sort -u chen.txt        # unique
10.0.0.7
10.0.0.8
10.0.0.9

实例1.2 取出域名并进行计数排序处理

1.2.1 模拟数据

cat >chen.log<<EOF
http://www.oldboyedu.com/
http://edu.51cto.com/
http://edu.51cto.com/user/user_id-8804946.html
http://www.zhibo8.cc/
http://weibo.com/1995418821/profile?topnav=1&wvr=6
http://chenfage.blog.51cto.com/
http://edu.51cto.com/user/user_id-8804946.html
http://www.oldboyedu.com/
http://www.zhibo8.cc/
http://www.zhibo8.cc/
EOF

1.2.2 解法1awk-sort-uniq

1.2.2.1 思路1

  • awk取出域名
  • sort可以排序默认是升序
  • uniq统计重复行的次数
  • awk -F /‘{print $3}‘ chen.log |sort|uniq -c|sort -r

1.2.2.2 awk取域名

[[email protected] ~]# awk -F / ‘{print $3}‘ chen.log |sort
chenfage.blog.51cto.com
edu.51cto.com
edu.51cto.com
edu.51cto.com
weibo.com
www.oldboyedu.com
www.oldboyedu.com
www.zhibo8.cc
www.zhibo8.cc
www.zhibo8.cc

1.2.2.3 uniq统计重复行次数

[[email protected] ~]# awk -F / ‘{print $3}‘ chen.log|sort|uniq -c
      1chenfage.blog.51cto.com
      3edu.51cto.com
      1weibo.com
      2www.oldboyedu.com
      3www.zhibo8.cc

1.2.2.4   sort -r 逆序排序

[[email protected] ~]# awk -F / ‘{print $3}‘ chen.log|sort|uniq -c|sort
      1chenfage.blog.51cto.com
      1weibo.com
      2www.oldboyedu.com
      3edu.51cto.com
      3www.zhibo8.cc
[[email protected] ~]# awk -F / ‘{print $3}‘ chen.log|sort|uniq -c|sort -r # reverse
      3www.zhibo8.cc
      3edu.51cto.com
      2www.oldboyedu.com
      1weibo.com
      1chenfage.blog.51cto.com
[[email protected] ~]# awk -F / ‘{print $3}‘ chen.log|sort|uniq -c|sort -r|head -2
      3www.zhibo8.cc
      3edu.51cto.com

1.2.3 解法2cut-sort-uniq

1.2.3.1 思路2

  • cut指定分隔符来切割-d
  • sort排序可以逆序
  • uniq统计相重复行的次数
  • cut -d/-f3 chen.log|sort|uniq -c|sort -r

1.2.3.2 cut -df 取域名

[[email protected] ~]# cut -d/ -f3 chen.log    #-d, --delimiter(分隔符)-f, --fields(域)
www.oldboyedu.com
edu.51cto.com
edu.51cto.com
www.zhibo8.cc
weibo.com
chenfage.blog.51cto.com
edu.51cto.com
www.oldboyedu.com
www.zhibo8.cc
www.zhibo8.cc

1.2.3.3 sort排序uniq取重复行

[[email protected] ~]# cut -d/ -f3 chen.log|sort
chenfage.blog.51cto.com
edu.51cto.com
edu.51cto.com
edu.51cto.com
weibo.com
www.oldboyedu.com
www.oldboyedu.com
www.zhibo8.cc
www.zhibo8.cc
www.zhibo8.cc
[[email protected] ~]# cut -d/ -f3 chen.log|sort|uniq -c
      1chenfage.blog.51cto.com
      3edu.51cto.com
      1weibo.com
      2www.oldboyedu.com
      3www.zhibo8.cc
[[email protected] ~]# cut -d/ -f3 chen.log|sort|uniq-c|sort -r
      3www.zhibo8.cc
      3edu.51cto.com
      2www.oldboyedu.com
      1weibo.com
      1chenfage.blog.51cto.com
[[email protected] ~]# cut -d/ -f3 chen.log|sort|uniq-c|sort -r|head -2
      3www.zhibo8.cc
      3edu.51cto.com

2. sort-排序

以行为单位对文件进行排序。

NAME
    sort -sort lines of text files #给文本文件的行排序
SYNOPSIS
    sort[OPTION]... [FILE]...
常用参数
-r,--reverse       #序列默认是升序
-u,--unique        #相同的行只输出一行
-k,--key=POS1[,POS2]   #指定第几列或第几列的第几个字符
-t,--field-separator=SEP #指定分隔符默认是空格
-n,--numeric-sort     #根据字符串的数值进行排序

实例2.1 对指定的列逆序排序

2.1.1 模拟数据

cat >chen.txt<<EOF
192.168.3.1 c
192.168.3.2 n
192.168.12.41 w
192.168.2.20 g
192.168.3.3 a
192.168.2.22 p
192.168.0.152 l
192.168.22.33 u
192.168.1.10 f
192.168.0.150 y
192.168.2.20 e
192.168.30.2 t
EOF

2.1.2 解法

2.1.2.1 思路

  • -t指定分隔符
  • -k指定以第几列为标准
  • -r逆序
  • sort-t" " -rk2 chen.txt

2.1.2.2 操作过程

[[email protected] ~]# sort -t" " -k2 chen.txt # -t指定分隔符为空格,-k指定第几列
192.168.3.1 c
192.168.2.20 e
192.168.1.10 f
192.168.2.20 g
192.168.0.152 l
192.168.3.2 n
192.168.2.22 p
192.168.30.2 t
192.168.22.33 u
192.168.12.41 w
192.168.0.150 y
[[email protected] ~]# sort -k2 chen.txt    #分隔符默认就是空格
192.168.3.3 a
192.168.3.1 c
192.168.2.20 e
192.168.1.10 f
192.168.2.20 g
192.168.0.152 l
192.168.3.2 n
192.168.2.22 p
192.168.30.2 t
192.168.22.33 u
192.168.12.41 w
192.168.0.150 y
[[email protected] ~]# sort -rk2 chen.txt   # -r代表逆序(默认是升序)【sort -t"" -rk2 chen.txt】
192.168.0.150 y
192.168.12.41 w
192.168.22.33 u
192.168.30.2 t
192.168.2.22 p
192.168.3.2 n
192.168.0.152 l
192.168.2.20 g
192.168.1.10 f

实例2.2 对IP地址分类倒序排序

2.2.1 模拟数据

cat >arp.txt<<EOF
192.168.3.1 00:50:56:C0:00:08
192.168.3.2 00:0C:29:FD:28:FD
192.168.12.41 00:0C:29:21:26:C7
192.168.2.20 00:50:56:27:78:CA
192.168.3.3 00:50:56:29:C4:6B
192.168.2.22 00:40:56:20:6E:AE
192.168.0.152 00:50:56:2E:4A:17
192.168.22.33 00:0C:29:61:1C:36
192.168.1.10 00:40:56:36:BC:B7
192.168.0.150 00:50:56:30:C3:8B
192.168.2.20 01:50:56:C0:00:04
192.168.30.2 00:50:56:23:68:FB
EOF

2.2.2 解法

2.2.2.1 思路

  • 默认按整行排序
  • -t指定分隔符
  • -k 1,1用逗号来分隔字段表示第一个字段开始排序到第一个字段结束
  • -k 1.1,3.3用点分隔字符表示第一个字段的第一个字符开始排序到第三个字段的第三个字符结束
  • sort -t.-k3.1,3.2n -k4.1,4.3rn arp.txt

2.2.2.2 操作过程

[[email protected] ~]# sort -t. -k3.1,3.2n -k4.1,4.3rnarp.txt
# -t指定分隔符是点
# -k3.1,3.2n表示第三个字段的第一个字符开始排序到第二个字符结束因为第三个字段只有两位数最后的一个n代表根据字符串的值来排序一定要加上
# -k4.1,4.3rn表示第四个字段的第一个字符开始排序到第三个字符结束-r代表逆序排序
192.168.0.152 00:50:56:2E:4A:17
192.168.0.150 00:50:56:30:C3:8B
192.168.1.10 00:40:56:36:BC:B7
192.168.2.22 00:40:56:20:6E:AE
192.168.2.20 00:50:56:27:78:CA
192.168.2.20 01:50:56:C0:00:04
192.168.3.3 00:50:56:29:C4:6B
192.168.3.2 00:0C:29:FD:28:FD
192.168.3.1 00:50:56:C0:00:08
192.168.12.41 00:0C:29:21:26:C7
192.168.22.33 00:0C:29:61:1C:36
192.168.30.2 00:50:56:23:68:FB
时间: 2024-10-04 15:37:24

Linux-计数排序企业级应用-uniq-sort的相关文章

算法——计数排序与快速排序

计数排序是一种算法复杂度 O(n) 的排序方法,适合于小范围集合的排序.比如100万学生参加高考,我们想对这100万学生的数学成绩(假设分数为0到100)做个排序.我们如何设计一个 最高效的排序算法.本文不光给出计数排序算法的传统写法,还将一步步深入讨论算法的优化,直到时间复杂度和空间复杂度最优. 先看看计数排序的定义 Counting sort (sometimes referred to as ultra sort or math sort[1]) is a sorting algorith

正则表达式 ------排序三工具(sort、uniq、wc)

一.sort 工具 (1)sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序 (2)sort 命令格式:sort [选项] 参数 (3)常用的选项: -f:忽略大小写: -b:忽略每行前面的空格: -M:按照月份进行排序: -n:按照数字进行排序: -r:反向排序: -u:等同于 uniq,表示相同的数据仅显示一行: -t:指定分隔符,默认使用[Tab]键分隔: -o <输出文件>:将排序后的结果转存至指定文件: -k:指定排序区域: 示例1:将 /etc/pa

linux 文件排序 sort

sort命令 sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出.sort命令既可以从特定的文件,也可以从stdin中获取输入. 语法 sort(选项)(参数) 选项 -b:忽略每行前面开始出的空格字符: -c:检查文件是否已经按照顺序排序: -d:排序时,处理英文字母.数字及空格字符外,忽略其他的字符: -f:排序时,将小写字母视为大写字母: -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符: -m:将几个排序号的文件进行合并: -M:将前面3个

计数排序(Count Sort )与插入排序(Insert Sort)

计数排序法:计数数组适用于当前数组密集的情况.例如(2,3,5,4,2,3,3,2,5,4) 方法:先找出最大值最小值,之后统计每个数出现的次数,根据次数从小到大往数组里添加 计数排序法是一种不需要比较的排序方法 1 void count(int top,int length,int arr[]) 2 { 3 int min=arr[0],max=arr[0],i=1,j=0; 4 int *count=(int*)malloc(sizeof(int)*(max-min+1)); 5 if(ar

linux常用命令-文本处理cut,sort,uniq,wc,tr

cut:截取文本特定字段 NAME       cut - remove sections from each line of files -d, --delimiter=DELIM(指定字段分隔符,默认是空格) use DELIM instead of TAB for field delimiter -f, --fields=LIST(指定要显示的字段) select  only  these  fields;  also print any line that contains no del

counting sort 计数排序

//counting sort 计数排序 //参考算法导论8.2节 #include<cstdio> #include<cstring> #include<algorithm> #include<cassert> using namespace std; const int k=5; const int n=7; int a[n]={5, 5, 1, 2 , 5, 4, 1}; int b[n]; int c[k+1]; int main() { int m

Uva-------(11462) Age Sort(计数排序)

B Age Sort Input: Standard Input Output: Standard Output   You are given the ages (in years) of all people of a country with at least 1 year of age. You know that no individual in that country lives for 100 or more years. Now, you are given a very si

Leetcode:Sort colors 计数排序

Sort colors: Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red,

经典排序算法 - 计数排序Counting sort

经典排序算法 - 计数排序Counting sort 注意与基数排序区分,这是两个不同的排序 计数排序的过程类似小学选班干部的过程,如某某人10票,作者9票,那某某人是班长,作者是副班长 大体分两部分,第一部分是拉选票和投票,第二部分是根据你的票数入桶 看下具体的过程,一共需要三个数组,分别是待排数组,票箱数组,和桶数组 var unsorted = new int[] { 6, 2, 4, 1, 5, 9 };  //待排数组 var ballot = new int[unsorted.Len

[C++]LeetCode: 127 Sort Colors (计数排序 &amp; 快速排序)

题目: Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, an