其他文章:
sort 命令
将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将排序结果标准输出。
既可以从特定的文件,也可以从 stdin 中获取输入。
sort [选项] [文件s]
选项
-b
:忽略每行前面开始出的空格字符(空格数不固定时,该选项几乎是必用的);-c
:检查文件是否已经按照顺序排序,如未排序,会提示从哪一行开始乱序;-C
:类似于-c
,只不过不输出任何诊断信息。可以通过退出状态码1判断出文件未排序-d
:排序时,只处理英文字母、数字及空格字符外,忽略其他的字符;-f
:排序时,将小写字母视为大写字母;-h
:使用易读性数字(例如:2K、1G)-i
:排序时,除了040至176之间的ASCII字符(八进制0-177)外,忽略其他的字符(忽略无法打印的字符如退格/换页键/回车);-k
:以哪个区间 (field) 来进行排序-m
:将几个排序好的文件进行合并,只是单纯合并,不做排序;-M
:将前面3个字母依照月份的缩写进行排序;-n
:依照数值的大小排序;-o<输出文件>
:将排序后的结果存入制定的文件;-r
:降序;-u
:忽略相同行-t<分隔字符>
:指定分隔符,默认的分隔符为空白字符和非空白字符之间的空字符;+<起始栏位>-<结束栏位>
:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
实例
简单排序
# 原样输出
cat /etc/passwd
# 升序输出
sort /etc/passwd
# 升序输出且忽略相同
sort -u /etc/passwd
将第3列按照数字从小到大顺序排列
sort -nk 3 -t: /etc/passwd
## 倒序
sort -nrk 3 -t: /etc/passwd
uniq 命令
用于报告或忽略文件中的重复行,一般与 sort 命令结合使用。
uniq [选项] [文件s]
选项
-c
或——count
: 在每列旁边(前面)显示该行重复出现的次数;-d
或--repeated
: 仅显示重复出现的行列;-f<栏位>
或--skip-fields=<栏位>
:忽略比较指定的栏位;-s<字符位置>
或--skip-chars=<字符位置>
:忽略比较指定的字符;-u
或——unique
:仅显示出一次的行列;-w<字符位置>
或--check-chars=<字符位置>
:指定要比较的字符。
实例
删除重复行
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
sort 和 uniq
sort 和 uniq 可结合使用求集合
并集
cat file1.txt file2.txt | sort | uniq > file.txt
交集
cat file1.txt file2.txt | sort | uniq -d >file.txt
差集
求file1.txt相对于file2.txt的差集,可先求出两者的交集temp.txt,然后在file1.txt中除去temp.txt即可。
cat file1.txt file2.txt | sort | uniq -d >temp.txt
cat file1.txt temp.txt | sort | uniq -u >file.txt
评论区