排序、唯一与重复

同文本文件打交道时,少不了要用到排序。sort命令能够帮助我们对文本文件和stdin进行 排序操作。它通常会配合其他命令来生成所需要的输出。uniq是一个经常与sort一同使用的命 令。它的作用是从文本或stdin中提取唯一(或重复)的行。

(1) 我们可以按照下面的方式轻松地对一组文件(例如file1.txt和file2.txt)进行排序:

$ sort file1.txt file2.txt > sorted.txt

# 或是

$ sort file1.txt file2.txt -o sorted.txt

(2) 按照数字顺序进行排序(由小到大):

$ sort -n file.txt

(3) 按照逆序进行排序(由大到小):

$ sort -r file.txt

(4) 按照月份进行排序(依照一月,二月,三月……):

$ sort -M months.txt

(5) 合并两个已排序过的文件:

$ sort -m file.txt file2.txt

(6) 找出已排序文件中不重复的行:

$ sort file1.txt file2.txt | uniq

(7) 检查文件是否已经排序过:

#!/bin/bash
# 功能描述:排序
sort -C filename ;
if [ $? -eq 0 ]; then
 echo Sorted;
else
 echo Unsorted;
fi

将filename替换成你需要进行检查的文件名,然后运行该脚本。

uniq

uniq命令通过消除重复内容,从给定输入中(stdin或命令行参数文件)找出唯一的行。它也可以用来找出输入中出现的重复行。

uniq只能作用于排过序的数据输入,因此,uniq要么使用管道,要么将排过序的文件作为输入,与sort命令结合使用。

(1) 从给定的输入数据中生成唯一的行:

$ cat sorted.txt
bash
foss
hack
hack

$ uniq sorted.txt
bash
foss
hack 

# 或是
$ sort unsorted.txt | uniq

(2) 只显示唯一的行,排除有重复出现的行:

$ uniq -u sorted.txt
bash
foss

# 或是
$ sort unsorted.txt | uniq -u

(3) 找出文件中重复的行:

$ sort unsorted.txt | uniq -d
hack

(4) 用uniq命令生成包含0值字节终止符的输出:

$ uniq -z file.txt

a.txt
b.txt

(5) 删除文件中所有指定的文件

$ uniq -z file.txt | xargs -0 rm

results matching ""

    No results matching ""