`
langgufu
  • 浏览: 2306896 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sort、uniq命令对文本进行排序、单一和重复操作

阅读更多

sort是在Linux里非常常用的一个命令,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。

sort命令语法

sort 选项 参数

常用选项

  • -b:忽略每行前面开始处的空格字符;
  • -c:检查文件是否已经按照顺序排序,排序过为真;
  • -d:排序时,处理英文字母、数字和空格字符,以字典顺序排序。忽略其他所有字符;
  • -f:排序时,将小写字母视为大写字母;
  • -i:排序时,处理040~176之间的ASCII字符,忽略其他所有字符;
  • -m:将几个排序好的文件进行合并;
  • -M:将前面3个字母按月份的缩写进行排序;
  • -n:按照数值大小进行排序;
  • -o outfile.txt:将排序后的结果存入outfile.txt;
  • -r:以相反的顺序进行排序;
  • -k:指定需要排序的列数(栏数);
  • -t 分隔符:指定排序时所用到的栏位分隔符;
  • + 起始栏位 - 结束栏位:以指定的栏位来排序,范围从起始栏位到结束栏位的前一栏位。(古老的用法)

sort常见用法

sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

[root@mail text]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5

[root@mail text]# sort sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5

忽略相同行使用-u选项或者uniq

[root@mail text]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5

[root@mail text]# sort -u sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
或者
[root@mail text]# uniq sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5

sort的-n、-r、-k、-t选项的使用:

[root@mail text]# cat sort.txt
AAA:BB:CC
aaa:30:1.6
ccc:50:3.3
ddd:20:4.2
bbb:10:2.5
eee:40:5.4
eee:60:5.1

#将BB列按照数字从小到大顺序排列:
[root@mail text]# sort -nk 2 -t: sort.txt
AAA:BB:CC
bbb:10:2.5
ddd:20:4.2
aaa:30:1.6
eee:40:5.4
ccc:50:3.3
eee:60:5.1

#将CC列数字从大到小顺序排列:
[root@mail text]# sort -nrk 3 -t: sort.txt
eee:40:5.4
eee:60:5.1
ddd:20:4.2
ccc:50:3.3
bbb:10:2.5
aaa:30:1.6
AAA:BB:CC

# -n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号

-k选项的具体语法格式:

-k选项的语法格式:

FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End--------
 FStart.CStart 选项  ,  FEnd.CEnd 选项

这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。

从公司英文名称的第二个字母开始进行排序:

$ sort -t ' ' -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000

使用了-k 1.2,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。

只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:

$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000

由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2 的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用-k 1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了-k 3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。

uniq命令

uniq命令常用语报告或者消除文件中的重复内容,一般与sort命令结合使用。

命令选项

  • -c:在每行开头显示重复行出现的次数;
  • -d:仅显示重复的列;
  • -f 栏位:忽略指定的栏;
  • -s N:指定可以跳过前N个字符;
  • -w 字符位数:指定用于比较的最大字符数;
  • -u:仅显示出现一次的行列;

uniq用法

删除重复行:

uniq file.txt
sort file.txt | uniq
sort -u file.txt

只显示单一行:

uniq -u file.txt
sort file.txt | uniq -u

统计各行在文件中出现的次数:

sort file.txt | uniq -c

在文件中找出重复的行:

sort file.txt | uniq -d

unix/liunx uniq详解   uniq:
 功能说明:检查及删除文本文件中重复出现的行列。

语 法:uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>] [--help][--version][输入文件][输出文件]

补充说明:uniq可检查文本文件中重复出现的行列。

注意: uniq所认为的重复行是指连续出现的重复行!      

参 数:   -c或--count   在每列旁边显示该行重复出现的次数。  

-d或--repeated   仅显示重复出现的行列。  

-f<栏位>或--skip-fields=<栏位>   忽略比较指定的栏位。  

-s<字符位置>或--skip-chars=<字符位置>   忽略比较指定的字符。  

-u或--unique   仅显示出一次的行列。  

-w<字符位置>或--check-chars=<字符位置>   指定要比较的字符。  

--help   显示帮助。  

--version   显示版本信息。  

[输入文件]   指定已排序好的文本文件。

[输出文件]   指定输出的文件。  

我们看日志的时候,可以先用-s或-f跳过日期,再去掉重复行。

 

用uniq命令可以删除相邻的重复行:
uniq [file]
但如果一文本中有重复却不相邻的行则无法删除,需要结合sort命令:
sort [file]|uniq
等效的sort命令是:
sort -u [file]
另外uniq命令有4个有用的选项:

$uniq -d file 只输出file中的重复行,且只输出一次,但不输出唯一的行
$uniq -u file 只输出file中的唯一行(当然是一次啦)
$uniq -c file 在每行前显示重复次数,可与其他选项结合,例如-cu或-cd或-c
$uniq -i file 比较时忽略大小写

-d 的结果和-u 的结果合并起来就是uniq的结果了。

 

[sql] view plain copy
 print?
  1. [root@AY140417160054681ae5Z ~]# cat >seq.txt  
  2. banana  
  3. apple  
  4. pear  
  5. orange  
  6. banana  

 

[plain] view plain copy
 print?
  1. [root@AY140417160054681ae5Z ~]# sort seq.txt | uniq -c  
  2.       1 apple  
  3.       2 banana  
  4.       2 orange  
  5.       1 pear  
分享到:
评论

相关推荐

    linux下uniq和sort命令用法详解.docx

    sort 命令是 Linux 中的一个文本处理命令,用于对文本进行排序。该命令的语法为:sort [-bcdfimMnr][-o 输出文件][-t 分隔字符][+起始栏位-结束栏位][--help][--version][文件] sort 命令的参数含义如下: * -b ...

    uniq命令 去除文件中的重复行

    我们应当注意的是,它和sort的区别,sort只要有重复行,它就去除,而uniq重复行必须要连续,也可以用它忽略文件中的重复行。 语法格式:uniq [参数] [文件] 常用参数: -c 打印每行在文本中重复出现的次数 -d ...

    linux下uniq和sort命令用法.docx

    Linux 下 uniq 和 sort 命令用法 uniq 命令是 Linux 中的一个文本处理命令,用于删除或...但是,它们的功能和选项不同,uniq 命令主要用于删除或显示文本文件中的重复行,而 sort 命令主要用于对文本文件进行排序。

    windows下的uniq

    `uniq`命令在Unix/Linux中是一个非常常见的文本处理工具,它用于过滤出连续重复的行,通常与`sort`命令结合使用,因为`uniq`只对连续的重复行进行处理。在Windows环境下,如果没有内置的`uniq`命令,可以寻找替代品...

    Shell中的sort和uniq命令

    `sort` 命令用于对文件内容进行排序,而 `uniq` 命令则用于去除文件中连续重复的行,或者显示只出现一次或多次的行。 1. **`sort` 命令**: - `-n`:按数字进行排序,而不是默认的字典顺序。 - `-r`:反转排序...

    LINUX处理文本命令

    处理文本和文本文件的命令 一. sort 文件排序, 通常用在管道中当过滤器来使用. 这个命令可以依据指定的关键字或指定的字符位置, 对文件行进行排序. 使用-m选项, 它将会合并预排序的输入文件. 想了解这个命令的全部...

    Linux命令 sort、uniq、tr工具详解

    `sort`、`uniq`和`tr`就是其中三个非常实用的文本处理工具,它们分别用于对文本文件内容进行排序、去除重复行以及转换字符。 首先,让我们详细了解`sort`命令。`sort`的主要功能是对文本文件的行进行排序。它支持...

    linux sort join cut paste split uniq

    `sort`、`join`、`cut`、`paste`、`split`和`uniq`是Linux命令行中的一组强大工具,它们专门用于对文本文件进行排序、合并、切割、拼接、分割和去重等操作。下面将详细讲解这些工具的使用方法和应用场景。 1. `sort...

    Linux操作命令八.doc

    sort 命令是 Linux 中一个非常有用的命令,它能够对文本文件和 stdin 进行排序操作,并且会结合其他命令来生成所需要的输出。sort 命令的格式为 sort[选项][文件名]。sort 命令有多种参数可以使用,常用的参数有六个...

    Shell 分析日志文件高效命令详解.docx

    这条命令将 access.log 文件中的每一行数据都输出到标准输出,然后使用 sed 命令对输出结果进行处理,最后使用 sort 和 uniq 命令对输出结果进行排序和去重。 12. 列出传输大小最大的几个文件 使用 awk 和 sort ...

    巧用Linux命令完成统计排序功能.docx

    1. `sort data`:此命令用于对文件"data"的内容进行排序。`sort`命令按照字典顺序(ASCII码)排列文件中的每一行,使得相同的内容被聚集在一起。这是利用`uniq`统计重复记录的前提,因为`uniq`只能识别连续重复的行...

    linuxuniq命令参数及用法详解---检查及删除文本文件中重复出现的行列知识.pdf

    在实际使用中,通常会配合`sort`命令一起使用,先对文件进行排序,然后再应用`uniq`。 5. **应用场景**: - 数据清洗:在处理CSV或其他数据文件时,可以使用`uniq`去除重复的数据记录。 - 日志分析:分析系统或...

    Linux字符处理基础

    文本排序操作在Linux中通常使用sort命令,该命令可以对文本文件中的数据行进行排序。sort命令的基本用法是接收一个文本文件作为输入,并输出排序后的结果。sort命令的常用参数包括-n(数值排序)、-t(指定分隔符)...

    查看服务器系统资源(cpu,内容)利用率前几位的进程的方法

    ps aux 命令可以显示当前系统中的所有进程,而 sort 命令可以对进程列表进行排序,uniq 命令可以对进程列表进行去重和统计。 示例命令:ps aux | sort | uniq 这个命令将显示当前系统中的所有进程,并对进程列表...

    Linux下面的排序

    Linux提供了强大的命令行工具`sort`来进行文本数据的排序,它不仅可以对简单的文本文件进行排序,还可以处理更复杂的场景,如按特定字段、忽略大小写、自定义排序规则等。 `sort`命令的基本语法是: ``` sort [选项...

    数据文件处理命令小结(tr,sort,cut,paste,join,uniq,split)

    `sort` 命令用于对文本文件中的行进行排序。它可以基于一个或多个字段来排序,并且可以用来合并文件。 ##### 命令格式 ``` sort [option] [filename] ``` ##### 选项解释 - `[option]`:可选的选项,用于指定`sort...

    linux windows sort.exe

    这个工具在Windows环境中模拟了Linux中的`sort`命令,允许用户对文本文件内容进行排序,这对于数据处理、日志分析和自动化脚本编写等工作来说非常有用。下面我们将详细探讨`sort.exe`的功能、使用方法以及它在...

    Linux sort,uniq,cut,wc命令详解

     sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。  sort语法  [root@www~]# sort [-fbMnrtuk] ...

Global site tag (gtag.js) - Google Analytics