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. 依据键或列进行排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
cat data.txt 1 mac 2000 2 winxp 4000 3 bad 1000 4 linux 1000 # -k指定了排序按照哪一键来进行 # -r按照逆序来进行排序 # -nr表明按照数字,采用逆序形式排序 sort -nrk 1 data.txt 输出: 4 linux 1000 3 bad 1000 2 winxp 4000 1 mac 2000 # 依据第二列进行排序 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命令通过消除重复的内容,从给定的输入中找出单一的行(重复的行只会被打印一次)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 |
$ 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 |