本节关键字:Linux、Bash Shell、文本排序
相关指令:sort、uniq
sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
基本语法:sort [选项] 文件名称
选项 | 说明 |
---|---|
-u | 去除重复行 |
-r | 降序排列,默认是升序 |
-o | 将排序结果输出到文件中,类似重定向符号> |
-n | 以数字排序,默认是按字符排序 |
-t | 分隔符 |
-k | 第N列 |
-b | 忽略前导空格。 |
-R | 随机排序,每次运行的结果均不同 |
# 按照用户的uid进行升序排列
$ sort -n -t: -k3 1.txt
# 按照用户的uid进行降序排列
$ sort -nr -t: -k3 1.txt
# 按照数字排序
$ sort -n 2.txt
# 按照数字排序并且去重
$ sort -nu 2.txt
$ sort -nr 2.txt
$ sort -nru 2.txt
$ sort -nru 2.txt
# 按照数字排序并将结果重定向到文件
$ sort -n 2.txt -o 3.txt
$ sort -R 2.txt
$ sort -u 2.txt
uniq用于去除连续的重复行。当重复的行并不相邻时,uniq 命令不起作用。
基本语法:uniq [选项] [输入文件] [输出文件]
选项 | 说明 |
---|---|
-c | 统计重复行次数 |
-d | 仅显示重复出现的行列 |
-f<栏位> | 忽略比较指定的栏位 |
-s<字符位置> | 忽略比较指定的字符 |
-u | 仅显示出一次的行列 |
-w<字符位置> | 指定要比较的字符 |
-i | 忽略大小写 |
–help | 帮助 |
–version | 显示版本信息 |
补充说明:
- 不指定[输入文件],则从标准输入读取数据
- 不指定[输出文件],则将内容显示到标准输出
# 去除文件2.txt中的重复行,并显示结果
$ uniq 2.txt
# 检查文件2.txt并删除文件中重复出现的行,并在行首显示该行重复出现的次数
$ uniq -c 2.txt
# 当重复的行并不相邻时,uniq 命令是不起作用的,此时可以使用sort命令解决:
$ sort file | uniq
# 找出文件2.txt中重复的行
$ uniq -d 2.txt
# 找出文件2.txt中重复的行,并统计在文件中出现的次数
$ uniq -dc 2.txt