Uniq:去重文件

来自泡泡学习笔记
BrainBs讨论 | 贡献2023年12月6日 (三) 09:42的版本 (创建页面,内容为“ uniq 将给定输入中的唯一行写入,如果没有给定输入或输入名为“-”,则写入标准输入。 <br> 语法: <pre>uniq [选项]… [输入 [输出]]</pre> <br> 默认情况下,uniq 打印其输入行,但丢弃所有相邻重复行的除第一个之外的所有输出行,因此没有输出行是重复的。可选地,它可以丢弃不重复的行,或者所有重复的行。 输入不需要排序,但只有在相邻的情…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

uniq 将给定输入中的唯一行写入,如果没有给定输入或输入名为“-”,则写入标准输入。


语法:

uniq [选项]… [输入 [输出]]


默认情况下,uniq 打印其输入行,但丢弃所有相邻重复行的除第一个之外的所有输出行,因此没有输出行是重复的。可选地,它可以丢弃不重复的行,或者所有重复的行。

输入不需要排序,但只有在相邻的情况下才会检测到重复的输入行。如果你想丢弃非相邻的重复行,也许你想使用 sort -u。


比较遵循由 LC_COLLATE 区域设置类别指定的规则。


如果没有指定输出文件,uniq 将写入标准输出。


选项

‘-f n’

‘–skip-fields=n’

在检查唯一性之前跳过每行的 n 个字段。如果一行的字段数少于 n,则使用空字符串进行比较。字段是由空白字符后跟非空白字符组成的序列。字段编号是基于 1 的,即 -f 1 将跳过第一个字段(该字段可能具有前导空白)。


‘-s n’

‘–skip-chars=n’

在检查唯一性之前跳过 n 个字符。如果一行的字符数少于 n,则使用空字符串进行比较。如果你同时使用字段和字符跳过选项,则首先跳过字段。

在不符合 POSIX 1003.1-2001 的系统上,uniq 支持传统的选项语法 +n。尽管这种传统行为可以通过 _POSIX2_VERSION 环境变量(参见标准符合性)控制,但可移植脚本应避免依赖于此变量的命令。例如,使用 ‘uniq ./+10’ 或 ‘uniq -s 10’ 而不是模糊的 ‘uniq +10’。


‘-c’

‘–count’

打印每行出现的次数。


‘-i’

‘–ignore-case’

忽略比较行时的大小写差异。


‘-d’

‘–repeated’

丢弃不重复的行。当单独使用时,此选项使 uniq 打印每个重复行的第一次副本,然后什么都不打印。


‘-D’

‘–all-repeated[=delimit-method]’

不要丢弃后续重复的输入行,但丢弃不重复的行。此选项主要用于与其他选项结合使用,例如忽略大小写或仅比较选定的字段。可选的 delimit-method,与长格式选项一起支持,指定如何分隔重复行的组,必须是以下之一:

  • ‘none’
    • 不分隔重复行的组。这与 –all-repeated(-D)相同。
  • ‘prepend’
    • 在每个重复行的组前输出换行符。使用 –zero-terminated(-z),使用零字节(ASCII NUL)作为分隔符,而不是换行符。
  • ‘separate’
    • 用单个换行符分隔重复行的组。这与使用 ‘prepend’ 相同,只是没有在第一个组之前插入分隔符,因此可能更适合直接输出给用户。使用 –zero-terminated(-z),使用零字节(ASCII NUL)作为分隔符,而不是换行符。


注意,当组被分隔并且输入流包含空行时,输出是模糊的。为了避免这种情况,通过 ‘tr -s’’ 过滤输入以删除空行。

这是一个 GNU 扩展。


‘–group[=delimit-method]’

输出所有行,并分隔每个唯一组。使用 –zero-terminated(-z),使用零字节(ASCII NUL)作为分隔符。可选的 delimit-method 指定如何分隔组,必须是以下之一:

  • ‘separate’
    • 用单个分隔符分隔唯一组。这是默认的分隔方法(如果没有指定),并且更适合直接输出给用户。
  • ‘prepend’
    • 在每个唯一项组前输出分隔符。
  • ‘append’
    • 在每个唯一项组后输出分隔符。
  • ‘both’
    • 在每个唯一项组周围输出分隔符。

注意,当组被分隔并且输入流包含空行时,输出是模糊的。为了避免这种情况,通过 ‘tr -s’’ 过滤输入以删除空行。

这是一个 GNU 扩展。


‘-u’

‘–unique’

丢弃重复输入组的最后一行。当单独使用时,此选项使 uniq 打印唯一行,然后什么都不打印。


‘-w n’

‘–check-chars=n’

在每行上最多比较 n 个字符(在跳过任何指定字段和字符之后)。默认情况下,整个其余行都被比较。


‘-z’

‘–zero-terminated’

用零字节分隔项目,而不是换行符(ASCII LF)。即,将输入视为由 ASCII NUL 分隔的项目,并以 ASCII NUL 终止输出项目。这可以与 ‘perl -0’ 或 ‘find -print0’ 以及 ‘xargs -0’ 一起使用,以便可靠地处理任意文件名(即使其中包含空格或其他特殊字符)。请注意,与 -z 一起,换行符被视为字段分隔符。