2013-09-15 22:16:23 xia7139 阅读数 8109
  • 零基础Linux命令详细案例讲解课程(第3季)--文本搜索...

    课程亮点: 笔记加案例详细讲解Linux知识!!!提供详细的笔记作为辅助工具,200多条笔记帮助学员快速掌握Linux命令行150多个知识点 课程内容: * 文本搜索:通过指定搜索范围、指定匹配范围、指定字符集,再结合正则表达式可进行准确内容的搜索,学习本内容后学员可根据实际业务场景设置相关搜索参数 * 文本处理:行或者指定字段排序、去重复行、文本剪切、文本合并、文件比较、字符替换,学习本内容后学员可熟练掌握文本处理相关命令 课程特色: * 笔记Linux命令:用200条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 * 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 * 笔记以超链接形式让知识点关联起来,形式知识体系 * 采用先概念后实例再应用方式,知识点深入浅出 * 提供授课内容笔记作为课后复习以及工作备查工具 部分图标(电脑PC端查看):

    152 人正在学习 去看看 翁老师

最近杂事太多,正事进展缓慢。Fighting!

linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能。本文这里举例说明如何利用Linux命令行进行文本按行去重并按重复次数排序。主要用到的命令有sort,uniq和cut。其中,sort主要功能是排序,uniq主要功能是实现相邻文本行的去重,cut可以从文本行中提取相应的文本列(简单地说,就是按列操作文本行)。

用于演示的测试文件内容如下:

Hello World.
Apple and Nokia.
Hello World.
I wanna buy an Apple device.
The Iphone of Apple company.
Hello World.
The Iphone of Apple company.
My name is Friendfish.
Hello World.
Apple and Nokia.
实现命令及过程如下:
1、文本行去重
(1)排序
由于uniq命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文本行进行排序,使重复行集中到一起。
$ sort test.txt 
Apple and Nokia.
Apple and Nokia.
Hello World.
Hello World.
Hello World.
Hello World.
I wanna buy an Apple device.
My name is Friendfish.
The Iphone of Apple company.
The Iphone of Apple company.
(2)去掉相邻的重复行
$ sort test.txt | uniq
Apple and Nokia.
Hello World.
I wanna buy an Apple device.
My name is Friendfish.
The Iphone of Apple company.

2、文本行去重并按重复次数排序
(1)首先,对文本行进行去重并统计重复次数(uniq命令加-c选项可以实现对重复次数进行统计。)。
$ sort test.txt | uniq -c
      2 Apple and Nokia.
      4 Hello World.
      1 I wanna buy an Apple device.
      1 My name is Friendfish.
      2 The Iphone of Apple company.
(2)对文本行按重复次数进行排序。
sort -n可以识别每行开头的数字,并按其大小对文本行进行排序。默认是按升序排列,如果想要按降序要加-r选项(sort -rn)。
$ sort test.txt | uniq -c | sort -rn
      4 Hello World.
      2 The Iphone of Apple company.
      2 Apple and Nokia.
      1 My name is Friendfish.
      1 I wanna buy an Apple device.
(3)每行前面的删除重复次数。
cut命令可以按列操作文本行。可以看出前面的重复次数占8个字符,因此,可以用命令cut -c 9- 取出每行第9个及其以后的字符。
$ sort test.txt | uniq -c | sort -rn | cut -c 9-
Hello World.
The Iphone of Apple company.
Apple and Nokia.
My name is Friendfish.
I wanna buy an Apple device.

下面附带说一下cut命令的使用,用法如下:

cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-d delim][-s][file ...]

上面的-b、-c、-f分别表示字节、字符、字段(即byte、character、field);
list表示-b、-c、-f操作范围,-n常常表示具体数字;
file表示的自然是要操作的文本文件的名称;
delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;
-s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)
三种方式中,表示从指定的范围中提取字节(-b)、或字符(-c)、或字段(-f)。

范围的表示方法:
      n   只有第n项 
      n-  从第n项一直到行尾
      n-m 从第n项到第m项(包括m)
      -m  从一行的开始到第m项(包括m)
      -   从一行的开始到结束的所有项

在写这篇文章的时候,用到了vim的大小写转化的快捷键:gu变小写,gU变大写。结合ctrl+v能够将一片文字中的字符进行大小写转换,非常好用。大笑

最后附加一个小段子:

用django的时候,启动web服务器,出现如下错误:

Django version 1.5.4, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Error: That port is already in use.
解决方法有两个:

(1) 加端口参数

python manage.py runserver 8080
(2) 终止占用端口的进程
sudo netstat -tulpn | grep :8000
kill -9 <进程pid>

2017-06-28 16:35:08 feng973 阅读数 52972
  • 零基础Linux命令详细案例讲解课程(第3季)--文本搜索...

    课程亮点: 笔记加案例详细讲解Linux知识!!!提供详细的笔记作为辅助工具,200多条笔记帮助学员快速掌握Linux命令行150多个知识点 课程内容: * 文本搜索:通过指定搜索范围、指定匹配范围、指定字符集,再结合正则表达式可进行准确内容的搜索,学习本内容后学员可根据实际业务场景设置相关搜索参数 * 文本处理:行或者指定字段排序、去重复行、文本剪切、文本合并、文件比较、字符替换,学习本内容后学员可熟练掌握文本处理相关命令 课程特色: * 笔记Linux命令:用200条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 * 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 * 笔记以超链接形式让知识点关联起来,形式知识体系 * 采用先概念后实例再应用方式,知识点深入浅出 * 提供授课内容笔记作为课后复习以及工作备查工具 部分图标(电脑PC端查看):

    152 人正在学习 去看看 翁老师

转载《利用Linux命令行进行文本按行去重并按重复次数排序》
转载《awk使用案例:通过awk去除重复行》

awk命令去重,sort, uniq命令去重统计

利用Linux命令行进行文本按行去重并按重复次数排序

linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能。本文这里举例说明如何利用Linux命令行进行文本按行去重并按重复次数排序。主要用到的命令有sort,uniq和cut。其中,sort主要功能是排序,uniq主要功能是实现相邻文本行的去重,cut可以从文本行中提取相应的文本列(简单地说,就是按列操作文本行)。

用于演示的测试文件内容如下:

Hello World.
Apple and Nokia.
Hello World.
I wanna buy an Apple device.
The Iphone of Apple company.
Hello World.
The Iphone of Apple company.
My name is Friendfish.
Hello World.
Apple and Nokia.
实现命令及过程如下:

1、文本行去重

(1)排序
由于uniq命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文本行进行排序,使重复行集中到一起。
$ sort test.txt
Apple and Nokia.
Apple and Nokia.
Hello World.
Hello World.
Hello World.
Hello World.
I wanna buy an Apple device.
My name is Friendfish.
The Iphone of Apple company.
The Iphone of Apple company.

(2)去掉相邻的重复行
$ sort test.txt | uniq
Apple and Nokia.
Hello World.
I wanna buy an Apple device.
My name is Friendfish.
The Iphone of Apple company.

2、文本行去重并按重复次数排序
(1)首先,对文本行进行去重并统计重复次数(uniq命令加-c选项可以实现对重复次数进行统计。)。
$ sort test.txt | uniq -c
2 Apple and Nokia.
4 Hello World.
1 I wanna buy an Apple device.
1 My name is Friendfish.
2 The Iphone of Apple company.

(2)对文本行按重复次数进行排序。
sort -n可以识别每行开头的数字,并按其大小对文本行进行排序。默认是按升序排列,如果想要按降序要加-r选项(sort -rn)。
$ sort test.txt | uniq -c | sort -rn
4 Hello World.
2 The Iphone of Apple company.
2 Apple and Nokia.
1 My name is Friendfish.

(3)每行前面的删除重复次数。
cut命令可以按列操作文本行。可以看出前面的重复次数占8个字符,因此,可以用命令cut -c 9- 取出每行第9个及其以后的字符。
$ sort test.txt | uniq -c | sort -rn | cut -c 9-
Hello World.
The Iphone of Apple company.
Apple and Nokia.
My name is Friendfish.
I wanna buy an Apple device.
下面附带说一下cut命令的使用,用法如下:

cut -b list [-n] [file …]
cut -c list [file …]
cut -f list [-d delim][-s][file …]

上面的-b、-c、-f分别表示字节、字符、字段(即byte、character、field);
list表示-b、-c、-f操作范围,-n常常表示具体数字;
file表示的自然是要操作的文本文件的名称;
delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;
-s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)
三种方式中,表示从指定的范围中提取字节(-b)、或字符(-c)、或字段(-f)。

范围的表示方法:
n 只有第n项
n- 从第n项一直到行尾
n-m 从第n项到第m项(包括m)
-m 从一行的开始到第m项(包括m)
- 从一行的开始到结束的所有项
在写这篇文章的时候,用到了vim的大小写转化的快捷键:gu变小写,gU变大写。结合ctrl+v能够将一片文字中的字符进行大小写转换,非常好用。

awk命令去除文件中重复数据的办法

  首先准备一个文本文件,随便写个文件,包含重复行数据的即可,或者你可以参考我这里的文件:

CodingAnts@ubuntu:~/awk$ cat dup
hello world
awk
coding ants
hello world
awk
hello world
awk
coding ants
coding ants

  共有9行,后面6行都是重复的前面的几行,最终的效果应该是只显示上面重点显示的那几行,先来看看效果:

CodingAnts@ubuntu:~/awk$ awk '!a[$0]++' dup
hello world
awk
coding ants

  在《awk程序指令模型》中介绍了awk的程序指令由模式和操作组成,即Pattern { Action }的形式,如果省略Action,则默认执行 print $0 的操作。

  实现去除重复功能的就是这里的Pattern:

!a[$0]++

  在awk中,对于未初始化的数组变量,在进行数值运算的时候,会赋予初值0,因此a[$0]=0,++运算符的特性是先取值,后加1,因此Pattern等价于

!0

  而0为假,!为取反,因此整个Pattern最后的结果为1,相当于if(1),Pattern匹配成功,输出当前记录,对于dup文件,前3条记录的处理方式都是如此。

  当读取第4行数据“hello world”的时候,a[$0]=1,取反后的结果为0,即Pattern为0,Pattern匹配失败,因此不输出这条记录,后续的数据以此类推,最终成功实现去除文件中的重复行。

2018-11-08 23:55:58 laugh_man 阅读数 33
  • 零基础Linux命令详细案例讲解课程(第3季)--文本搜索...

    课程亮点: 笔记加案例详细讲解Linux知识!!!提供详细的笔记作为辅助工具,200多条笔记帮助学员快速掌握Linux命令行150多个知识点 课程内容: * 文本搜索:通过指定搜索范围、指定匹配范围、指定字符集,再结合正则表达式可进行准确内容的搜索,学习本内容后学员可根据实际业务场景设置相关搜索参数 * 文本处理:行或者指定字段排序、去重复行、文本剪切、文本合并、文件比较、字符替换,学习本内容后学员可熟练掌握文本处理相关命令 课程特色: * 笔记Linux命令:用200条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 * 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 * 笔记以超链接形式让知识点关联起来,形式知识体系 * 采用先概念后实例再应用方式,知识点深入浅出 * 提供授课内容笔记作为课后复习以及工作备查工具 部分图标(电脑PC端查看):

    152 人正在学习 去看看 翁老师

命令功能:

通过sort命令可以实现对输入流或者文本内容进行排序,并将结果输出。

命令语法:

sort  [option]  [file]

命令参数:

参数 说明
-k 指定列,排序会按照此列为基准进行排序
-r 倒序排序
-t 指定排序的分隔符
-h 可以带单位进行比较,比如2K,3M,4G等等,不需要在转换成一样的单位
-u 排序时如果有相同行,会进行合并,把重复行去掉
-n 按照数字的大小进行排序

以上,应该是sort最常使用的几个参数,其他的参数还有很多,如需使用,可以使用查询帮助:

man sort  或者 sort --help

命令示例

1、不加参数

sort会按照ASCII码从第一个字符开始进行比较,第一个字符相同再按照第二个字符、第三个字符…依次论推进行比较。
这里有一个sort_num文件进行排序测试,如下:
在这里插入图片描述
命令:sort sort_num
结果如下:
在这里插入图片描述
这里18最大却排在了前面,由于没加任何参数,18实际上会被当做两个字符"1"和"8",所以按照ASCII码的顺序,"1"当然比第二行同位置的"4"以及第六行同位置的"5"以及最后一行的"8"小,所以排在前面了。

2、加参数-n:按数字排序

这个参数会把文本按数字进行排序,还是1中的例子:
命令:·sort -n sort_num
在这里插入图片描述
这次18排在后面啦!

3、参数-r:倒序排序

这就是顺序和没加参数的sort结果反过来。正常的sort命令是按照ASCII码顺序依次从小往大排,-r就是从大往小排。
命令:sort -r sort_num
在这里插入图片描述

4、参数-u:去除重复值:

比如这个sort_num文件,加参数-u会把包含4的行做去重操作,只保留一个。
在这里插入图片描述

5、参数-k:指定要比较的列

默认情况下,如果要比较的数据中有多个列,那么sort比较默认会比第一列,加-k参数,会按照指定的列进行比较:
如下,:
在这里插入图片描述
命令:sort -k 2
在这里插入图片描述

6、参数-t:指定分隔符

默认情况下,我们用-k指定列时,列与列之间默认是用空格或者tab键隔开的。-t可以指定分隔符为别的符号。比如passwd文件,我们指定以冒号为分割,按第三列进行比较,如下:
在这里插入图片描述

7、-k参数的进阶使用

-k参数可以使用多次,按照多列进行排序。
这里有个文档,如下:
在这里插入图片描述我们对这个ip列表用".“分隔,先对第四列排序,然后在对第三列排序。
命令:sort -t . -k 4.1,4.2 -k 3,3 sort_ip
参数解释:
-t . 以”."为分隔符进行分割
-k 4.1,4.2:先按照第4列进行排序,从第四列的第一个字符到第四列的第二个字符。
-k 3,3按照第3列进行排序。
结果:
在这里插入图片描述可以看到,结果是优先排序第四列,如果第四列相同,会按照第三列进行排序

2017-04-26 10:56:50 q423498555 阅读数 926
  • 零基础Linux命令详细案例讲解课程(第3季)--文本搜索...

    课程亮点: 笔记加案例详细讲解Linux知识!!!提供详细的笔记作为辅助工具,200多条笔记帮助学员快速掌握Linux命令行150多个知识点 课程内容: * 文本搜索:通过指定搜索范围、指定匹配范围、指定字符集,再结合正则表达式可进行准确内容的搜索,学习本内容后学员可根据实际业务场景设置相关搜索参数 * 文本处理:行或者指定字段排序、去重复行、文本剪切、文本合并、文件比较、字符替换,学习本内容后学员可熟练掌握文本处理相关命令 课程特色: * 笔记Linux命令:用200条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 * 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 * 笔记以超链接形式让知识点关联起来,形式知识体系 * 采用先概念后实例再应用方式,知识点深入浅出 * 提供授课内容笔记作为课后复习以及工作备查工具 部分图标(电脑PC端查看):

    152 人正在学习 去看看 翁老师

sort可以对资料流进行排序


sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,预设是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思


使用这个比较有趣的1点是,我们可以对资料流进行分隔然后再以某个区间来排序。

/etc/passwd 内容是以 : 来分隔的,我想以第三栏含后面数据来排序,该如何?
[dmtsai@study ~]$ cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash
alex:x:1001:1002::/home/alex:/bin/bash
arod:x:1002:1003::/home/arod:/bin/bash

uniq,可以对资料流中的数据,删除连续重复的信息或者对连续重复信息进行计数,这里的连续重复,指的是既连续,又重复的数据,例如下面有1个文件
 hello
 hi
 hello
 hello
 hi
 hi
然后我们通过uniq进行处理最后得到的将会是
 hello
 hi
 hello
 hi
这1点我们是要注意一下的,所以这个命令通常都会搭配sort一起使用,因为sort可以把资料流给排序了,排序后,资料自然就会都整理好,然后再通过uniq就可以删除重复的资料或者对资料进行计数了,


wc,如果我们要对1个文件进行统计,统计里面有多少行,多少个字符,那么久可以使用这个wc了,用法很简单,只需要在|后加上wc [-l(仅列出行)w(仅列出字符)m(仅列出多少个字符串)]

2016-05-08 09:38:00 shuanghujushi 阅读数 22693
  • 零基础Linux命令详细案例讲解课程(第3季)--文本搜索...

    课程亮点: 笔记加案例详细讲解Linux知识!!!提供详细的笔记作为辅助工具,200多条笔记帮助学员快速掌握Linux命令行150多个知识点 课程内容: * 文本搜索:通过指定搜索范围、指定匹配范围、指定字符集,再结合正则表达式可进行准确内容的搜索,学习本内容后学员可根据实际业务场景设置相关搜索参数 * 文本处理:行或者指定字段排序、去重复行、文本剪切、文本合并、文件比较、字符替换,学习本内容后学员可熟练掌握文本处理相关命令 课程特色: * 笔记Linux命令:用200条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 * 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 * 笔记以超链接形式让知识点关联起来,形式知识体系 * 采用先概念后实例再应用方式,知识点深入浅出 * 提供授课内容笔记作为课后复习以及工作备查工具 部分图标(电脑PC端查看):

    152 人正在学习 去看看 翁老师

在linux的只用过程中,总是避免不了排序问题。比如,topN问题。linux提供了sort排序命令,支持常用的排序功能。

常用参数

sort命令支持很多参数,常用参数如下:

短参数 长参数 说明
-n – number-sort 按字符串数值排序,与-g区别为不转为浮点数
-g –general-number-sort 按通用数值排序,支持科学计数法
-f –ignore-case 忽略大小写,默认大小写字母不同
-k –key=POS1[,POS2] 排序从POS1开始,若指定POS2,则POS2结束,否则以pos1排序
-t –field-separator=SEP 指定列的分割符
-r –reverse 降序排序,默认为升序
-h –human-numeric-sort 使用易读性数字(例如: 2K 1G)
-u –unique 去除重复的行
-o –output=FILE 将输出写入文件

常用用法举例

1.默认排序

默认情况下,sort命令,以字母序进行文本排序。如下:

shuanghu@shuanghu:tmp$cat word.txt
one
two 
three
four

shuanghu@shuanghu:tmp$sort word.txt
four
one
three
two

2.数字排序

如果想对数字进行排序,可以使用-n参数

shuanghu@shuanghu:tmp$ cat num.txt 
100
20
3
shuanghu@shuanghu:tmp$ sort num.txt -n
3
20
100

3.指定列排序

sort排序的时候,可以按字段分割的数据进行排序。-t参数表示行的分割字符,-k表示第几列。当然,可以进行降序排序,-r参数可以实现。
下面是对passwd文件,以冒号(:)进行分割,然后对第三列以数字方式进行降序排序。

shuanghu@shuanghu:etc$ cat passwd 
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
shuanghu@shuanghu:etc$ sort -t ':' -k 3 -nr passwd 
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
games:x:5:60:games:/usr/games:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
sys:x:3:3:sys:/dev:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

4.文件夹大小排序

在du的时候,加上-h可以使用易读性数字,比如2k,1g,3M这种。sort也支持-h参数。
比如,du一个文件夹下的目录大小后,想以文件大小进行排序。由于du -h的结果是3k,2M,1G这种,不能简单的按数字排序。所以,可以使用-h参数。具体如下:

shuanghu@shuanghu:tmp$ du -h
2.0G    ./test2
4.0K    ./test3
316M    ./test
2.3G    .
shuanghu@shuanghu:tmp$ du -h |sort -hr
2.3G    .
2.0G    ./test2
316M    ./test
4.0K    ./test3

5.系统进程内存占用排序

查看系统进程中,内存占用最多的前5个进程信息

shuanghu@shuanghu:tmp$ ps aux|sort -gr -k 4|head -n 5
shuanghu  1740 15.7  4.6 1506764 189872 ?      Sl    507 142:08 compiz
root      1304  2.1  1.9 338928 80208 tty7     Ssl+  507  19:29 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
shuanghu  1933  0.0  1.1 1074520 46708 ?       Sl    507   0:00 /usr/lib/evolution/evolution-calendar-factory
shuanghu  1833  0.0  0.8 974900 34468 ?        Sl    507   0:01 nautilus -n
shuanghu  2111  0.0  0.6 655712 24920 ?        Sl    507   0:16 gnome-terminal

6.对文件内容进行去重

如果文件内容有很多重复的,需要进行去重。sort也是支持的,可以通过-u参数使用

shuanghu@shuanghu:tmp$cat word.txt
one
two
two
three
three
three
four
four
four

shuanghu@shuanghu:tmp$sort -u word.txt
four
one
three
two

7.将sort输出内容写入文件

在shell中,一般将控制台内容写入文件,可以使用重定向,但如果想把sort的排序内容写回文件,则不能使用重定向。则需要-o参数。具体如下:

shuanghu@shuanghu:tmp$cat word.txt
one
two 
three
four
shuanghu@shuanghu:tmp$sort word.txt > word.txt
shuanghu@shuanghu:tmp$cat word.txt #输出为空

shuanghu@shuanghu:tmp$sort word.txt -o word.txt
shuanghu@shuanghu:tmp$sort -u word.txt
four
one
three
two

Linux系统 sort排序命令

博文 来自: CityzenOldwang
没有更多推荐了,返回首页