文本中的重复行,基本上不是我们所要的,所以就要去除掉。使用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
| 用法:uniq [选项]... [输入文件 [输出文件]] 从 <输入文件>(或标准输入)中过滤内容相同的相邻的行, 并写到 <输出文件>(或标准输出)。
不带选项时,内容相同的行将仅输出一次。
长选项的必选参数对于短选项也是必选的。 -c, --count 在每行之前加上该行的重复次数作为前缀 -d, --repeated 只输出重复的行,每组重复的行输出一次 -D 输出所有重复的行 --all-repeated[=方法] 类似 -D,但支持在每组重复的行之间添加一行空行; 方法={none(默认),prepend,separate} -f, --skip-fields=N 不要比较前 N 个字段 --group[=方法] 分组输出所有项目,每组之间用空行分隔; 方法={separate(默认),prepend,append,both} -i, --ignore-case 比较时忽略大小写 -s, --skip-chars=N 不要比较前 N 个字符 -u, --unique 只输出不重复(内容唯一)的行 -z, --zero-terminated 以 NUL 空字符而非换行符作为行分隔符 -w, --check-chars=N 每行最多比较 N 个字符 --help 显示此帮助信息并退出 --version 显示版本信息并退出
字段指的是空白字符(通常是空格和/或制表符)的序列,后跟非空白字符的序列。 程序将先跳过字段 (--skip-fields),后跳过字符 (--skip-chars)。
除非重复的行是相邻的,否则 "uniq" 将无法检测到它们。 您可能需要事先对输入进行排序,或使用 "sort -u" 而无需接着使用 "uniq"。
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/> 请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误 完整文档 <https://www.gnu.org/software/coreutils/uniq> 或者在本地使用:info '(coreutils) uniq invocation'
|
uniq 处理文件重复数据
经常有这样的需求:两个文本文件要求取重复的行或只取不重复的,但是uniq
只能处理相邻重复的行,所以需要借助于sort
命令,先排序。利用现存两个文件
file1
和file2
,生成一个新的文件。
取出两个文件的并集(重复的行只保留一份)
1
| cat file1 file2 | sort | uniq
|
取出两个文件的交集(只留下同时存在于两个文件中的文件,重复行)
1
| cat file1 file2 | sort | uniq -d
|
删除交集,留下其他的行(非重复行)
1
| cat file1 file2 | sort | uniq -u
|
注意:对文本操作时,若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过。