[置顶] shell sort 排序 二次排序 去重

时间:2021-11-29 12:21:44

sort命令


sort命令既可以从特定的文件,也可以从stdin中获取输入,并将输出写入stdout。uniq的工作模式和sort一样。
以下两种方法都可以对一组文件进行排序。


sort file1.txt file2.txt ... > sorted.txt
sort file1.txt file2.txt ... -o sorted.txt
找出已排序文件中不重复的行


cat sorted_file.txt | uniq > uniq_lines.txt
sort -n file.txt # 按数字进行排序
sort -r file.txt # 按逆序进行排序
sort -M months.txt # 按月份进行排序
# 合并两个排序过的文件,并且不需要对合并后的文件在进行排序
sort -m sorted1 sorted2
1. 依据键或列进行排序
cat data.txt
mac 2000
winxp 4000
linux 3000
linux 2000
mac 1000
bad 1000
linux 1000
# -k指定了排序按照哪一键来进行
# -r按照逆序来进行排序
# -nr表明按照数字,采用逆序形式排序
sort -nrk 1 data.txt
输出:
winxp 4000
mac 2000
mac 1000
linux 3000
linux 2000
linux 1000
bad 1000
# 依据第二列进行排序
sort -k 2 data.txt
3 bad 1000
4 linux 1000
1 mac 2000
2 winxp 4000
sort命令对于字母和数字排序有着不同的处理方式,所以如果要采用数字排序,应该明确给出-n选项。
# 明确指定某一个列范围的字符
sort -nk 2,3 data.txt
# -b忽略文件中的前导空白字符
# -d指明以字典序进行排序
sort -bd unsorted.txt
uniq命令


uniq命令通过消除重复的内容,从给定的输入中找出单一的行(重复的行只会被打印一次)


$ cat sorted.txt
bash
foss
hack
hack
$ uniq sorted.txt
bash
foss
hack
# 或者
sort unsortd.txt | uniq
# 或者
sort -u unsorted.txt
# 只显示唯一的行(再输入文件中没有出现重复的行)
$ uniq -u sorted.txt
bash
foss
# 或者
sort unsorted.txt | uniq -u
# 找出文件中重复的行
sort unsorted.txt | uniq -d
hack
# 统计各行在文件中出现的次数
sort unsorted.txt | uniq -c
1 bash
1 foss
2 hack
我们可以结合-s和-w来指定键:
-s 指定可以跳过前N个字符
-w 指定用于比较的最大字符数。


$ cat data.txt
u:01:gnu
d:04:linux
u:01:bash
u:01:hack
$ sort data.txt | uniq -s 2 -w 2
d:04:linux
u:01:bash