sort排序命令uniq去除排序过的文件中的重复行cut提取命令wc统计命令

疯狂的鱼摆摆 疯狂的鱼摆摆     2022-08-19     713

关键词:

sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。

sort语法

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

对/etc/passwd 的账号进行排序
[root@www ~]# cat /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。

 

/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何

[root@www ~]# cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

默认是以字符串来排序的,如果想要使用数字排序:

cat /etc/passwd | sort -t ':' -k 3n
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh

默认是升序排序,如果要倒序排序,如下

cat /etc/passwd | sort -t ':' -k 3nr
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ntp:x:106:113::/home/ntp:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

 

如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。

cat /etc/passwd |  sort -t':' -k 6.2,6.4 -k 1r      
sync:x:4:65534:sync:/bin:/bin/sync
proxy:x:13:13:proxy:/bin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

 

查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重:

cat /etc/passwd |  sort -t':' -k 7 -u
root:x:0:0:root:/root:/bin/bash
syslog:x:101:102::/home/syslog:/bin/false
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

 

uniq

 uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。

uniq语法

[root@www ~]# uniq [-icu]
选项与参数:
-i   :忽略大小写字符的不同;
-c  :进行计数
-u  :只显示唯一的行
-c 在输出行前面加上每行在输入文件中出现的次数。
-d 仅显示重复行。
-u 仅显示不重复的行。
-f Fields 忽略由 Fields 变量指定的字段数目。如果 Fields 变量的值超过输入行中的字段数目, uniq 命令用空字符串进行比较。这个标志和 -Fields 标志是等价的。
-s Characters 忽略由 Characters 变量指定的字符的数目。如果 Characters 变量的值超过输入行中的字符的数目, uniq 用空字符串进行比较。如果同时指定 -f 和 -s 标志, uniq 命令忽略由 -s Characters 标志指定的字符的数目,而从由 -f Fields 标志指定的字段后开始。 这个标志和 +Characters 标志是等价的。
-Fields 忽略由 Fields 变量指定的字段数目。这个标志和 -f Fields 标志是等价的。
+Characters 忽略由 Characters 变量指定的字符的数目。如果同时指定 - Fields 和 +Characters 标志, uniq 命令忽略由 +Characters 标志指定的字符数目,并从由 -Fields 标志指定的字段后开始。 这个标志和 -s Characters 标志是等价的。
 
- c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。
- d 只显示重复行 。
- u 只显示文件中不重复的各行 。
- n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。
+ n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。
- f n 与- n相同,这里n是字段数。
- s n 与+n相同,这里n是字符数。

 

testfile的内容如下

复制代码
cat testfile
hello
world
friend
hello
world
hello
复制代码

 

直接删除未经排序的文件,将会发现没有任何行被删除

复制代码
#uniq testfile  
hello
world
friend
hello
world
hello
复制代码

 

排序文件,默认是去重

#cat words | sort |uniq
friend
hello
world

 

排序之后删除了重复行,同时在行首位置输出该行重复的次数

#sort testfile | uniq -c
1 friend
3 hello
2 world

 

仅显示存在重复的行,并在行首显示该行重复的次数

#sort testfile | uniq -dc
3 hello
2 world

 

仅显示不重复的行

sort testfile | uniq -u
friend  

 

cut

cut命令可以从一个文本文件或者文本流中提取文本列。

cut语法

[root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符
[root@www ~]# cut -c 字符区间            <==用于排列整齐的信息
选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;

 

PATH 变量如下

[root@www ~]# echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
# 1 | 2       | 3   | 4       | 5            | 6            | 7

 

将 PATH 变量取出,我要找出第五个路径。

#echo $PATH | cut -d ':' -f 5
/usr/local/bin

 

将 PATH 变量取出,我要找出第三和第五个路径。

#echo $PATH | cut -d ':' -f 3,5
/sbin:/usr/local/bin

 

将 PATH 变量取出,我要找出第三到最后一个路径。

echo $PATH | cut -d ':' -f 3-
/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games

 

将 PATH 变量取出,我要找出第一到第三个路径。

#echo $PATH | cut -d ':' -f 1-3
/bin:/usr/bin:/sbin:
 

 

将 PATH 变量取出,我要找出第一到第三,还有第五个路径。

echo $PATH | cut -d ':' -f 1-3,5
/bin:/usr/bin:/sbin:/usr/local/bin

 

实用例子:只显示/etc/passwd的用户和shell

#cat /etc/passwd | cut -d ':' -f 1,7 
root:/bin/bash
daemon:/bin/sh
bin:/bin/sh

 

 wc

统计文件里面有多少单词,多少行,多少字符。

wc语法

[root@www ~]# wc [-lwm]
选项与参数:
-l  :仅列出行;
-w  :仅列出多少字(英文单字);
-m  :多少字符;

 

默认使用wc统计/etc/passwd

#wc /etc/passwd
40   45 1719 /etc/passwd

40是行数,45是单词数,1719是字节数

 

wc的命令比较简单使用,每个参数使用如下:

复制代码
#wc -l /etc/passwd   #统计行数,在对记录数时,很常用
40 /etc/passwd       #表示系统有40个账户

#wc -w /etc/passwd  #统计单词出现次数
45 /etc/passwd

#wc -m /etc/passwd  #统计文件的字节数
1719

linux删除文件内重复行

...行,原因同上。第三,用sort+sed命令,同样需要sort命令先排序。以上原理都是上下行比对,如果中间开了几行,uniq就不生效例如:111222111是不能正确排序的,必须是:111111222uniq才会生效,所以都需要先用sort来排序,然后将结果... 查看详情

uniq

...数据输入,或者与sort配合使用。(下面的文件都是经过排序处理的文件或者未排序文件配合sort使用)uniqfile:去除重复行数据(sortfile|uniq)uniq-ufile:显示没有重复的行数据(sortfile|uniq-u)uniq-cfile:统计重复次数(sortfile|uniq-c... 查看详情

linux系统sort和uniq命令联合使用

...行。假设b.txt包括d,e,c,b四行。交集,把两个文件放到一起排序,只输出次数多于一次的项:$sorta.txtb.txt|uniq-d并集,把两个文件放到一起排序,重复的项只算一次:$sorta.txtb.txt|uniq差集(A-B),把B的元素重复2份和A的元素放到一起排... 查看详情

第十三章对文本进行排序单一和重复操作:sort命令uniq命令(代码片段)

第十三章对文本进行排序、单一和重复操作:sort命令、uniq命令sort命令名字解释sort命令它将文件进行排序,并将排序结果标准输出。sort命令即可以从特定的文件,也可以从stdin中获取输入。语法sort(选项)(参数)选项-b:忽略每行... 查看详情

linux文件行排序去重结果不同sort和uniq

对文件排序去重计算行数发现用两种方法得到的结果不一样#sortusers_with_tokens_expire20131001|uniq-u|wc-l8642#sort-uusers_with_tokens_expire20131001|wc-l8671请问是什么导致的?参考技术A骚年,你有仔细观察者两个命令吗?举个例子:文件filea为:a... 查看详情

日志查询常用命令

...去除重复,注意uniq只能去除连续的重复行,因此需要先排序,之后再用uniq去重grep\'keyword\'filename|sort|uniq查看文件时加上-Oec参数,解决中文显示乱码lv-Oecfilename截取文件指定列指定分隔符为空格cut-d\'\'-f3-5获取第3-5个域的内容提... 查看详情

文本处理工具uniq去重与sort排序(代码片段)

uniq命令删除文件中的重复行。uniq命令读取由InFile参数指定的标准输入或文件。该命令首先比较相邻的行,然后除去第二行和该行的后续副本。用法:uniq[选项]…(输入[输出]]从输入(或标准输入)中过滤相邻的匹配行,写入到输出(... 查看详情

如何删除文件中的重复行而不在 Unix 中对其进行排序

】如何删除文件中的重复行而不在Unix中对其进行排序【英文标题】:HowtodeleteduplicatelinesinafilewithoutsortingitinUnix【发布时间】:2010-11-2911:41:18【问题描述】:有没有办法在Unix中删除文件中的重复行?我可以使用sort-u和uniq命令来做... 查看详情

sort,uniq,wc指令简单用法

sort用于排序,可以根据不同的数据类型来进行排序,例如想要查看最后一个登陆的用户信息,可以把last和sort结合起来使用,按照登陆时间排序。使用sort排序:sort常用参数:-f:忽略大小写的差异-b:忽略最前面的空格符部分-M... 查看详情

sort,uniq,wc,history命令简介

sort:排序数据-n:按照数值的大小进行排序-r:逆序排序-t:字段分隔符-k:以哪个字段为关键字-u:相同的行只显示一次-f:忽略大小写uniq:检查文件中重复出现的行-c:重复出现的行的次数-d:只显示重复出现的行wc:文本统计的命令-l:... 查看详情

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

参考技术A利用linux命令行进行文本按行去重并按重复次数排序linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能。本文这里举例说明如何利用linux命令行进行文本按行去重并按重复次数排序。主... 查看详情

linux命令(12)uniq去重

...p://blog.51yip.com/shell/1022.html实例详细说明linux下去除重复行命令uniq一,uniq干什么用的文本中的重复行,基本上不是我们所要的,所以就要去除掉。linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个。使用uniq的... 查看详情

使用uniq命令给日志文件去重并排序

...相同行去重uniqtest.txtb.sort命令让重复的行相邻先用sort做排序,让重复的行相邻,然后用uniq去重sorttest.txt|uniq用sort-u即可实现该功能,这里的-u就是uniqc.去重计数参数-c--count去重计数sorttest.txt|uniq-c 从文件中过滤重复信息方法... 查看详情

linux命令如何删除文件里面的重复行

...9;  第三,用sort+sed命令,同样需要sort命令先排序。sort-n$file|sed'$!N;/^\\(.*\\)\\n\\1$/!P;D'Shell脚本#!/bin/sh file='test.txt' sort-n$file|uniq sort-n$file|awk'if($0!=line)print;line=$0' sort-n$file|sed'$!N;/^\\(.*\\)\\... 查看详情

sort排序

sortfile1...fileN-ofile:将n个file文件内容排序,并写入filesort-nfile:按数字顺序显示文件内容(按字母表和数字排序有不同的处理方式)sort-rfile:倒序显示文件内容sort-cfile:判断文件是否已经排序sort-mfile1...fileN:合并已排序过的文... 查看详情

sort排序命令怎么使用

参考技术A  sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。下面跟着我一起来了解一下吧。  sort排序命令怎么使用  1sort的... 查看详情

uniq命令

uniq命令需要和sort命令结合到一起使用-c:排序后统每行出现的次数-u:排序后显示不重复的行-d:排序后显示重复的行-i:忽略大小写本文出自“激情燃烧的岁月”博客,请务必保留此出处http://liuzhengwei521.blog.51cto.com/4855442/1884788 查看详情

linux:如何对文本里的相同行进行去重

...行才进行去重各位高手回哪个都谢谢使用uniq但记住不要排序就可以了追问我查了一下,uniq确实可以对相邻的行进行去重,那么对全文中不管相邻与否,都可以去重又给怎么办追答全文中去重需要先使用sort命令对每行进行排序,... 查看详情