引言
如果你是Linux用户,并且工作涉及处理和操作文本文件和字符串,那么你应该已经熟悉了uniq命令,因为它是最常用的命令。
对于那些不熟悉uniq命令的人来说,它就是一个命令行工具,用于打印或忽略重复的字符串和行。
uniq过滤来自输入(或stdin)的相邻匹配行,并写入到输出(或stdout)。
如果没有选项,匹配线将合并到第一个引用。
下面通过示例演示uniq的不同作用。
编辑搜图
请点击输入图片描述
忽略重复项
下面是我们本文要处理和筛选的内容。
cat coder-helper.txt Hello Hello How are you? How are you? Thank you Thank you
执行以下指令
uniq coder-helper.txt
输出内容如下
Hello How are you? Thank you
显示重复行数
使用-c参数,可以查看文件中的重复行计数。执行以下指令:
uniq -c coder-helper.txt
输出内容如下:
2 Hello 2 How are you? 2 Thank you
仅打印有重复的行
为了演示此功能,我们将coder-helper.txt文本内添加一行内容,如下:
cat coder-helper.txt Hello Hello Good morning How are you? How are you? Thank you Thank you
通过使用-d参数,我们可以只选择文件中重复的行。
uniq -d coder-helper.txt
输出内容如下:
Hello How are you? Thank you
比较的时候忽略大小写的区别
通常,当你使用uniq命令时,它会考虑字母的大小写。但是如果想大小写不敏感,可以使用-i参数。
假如我们的文本内容如下:
cat coder-helper.txt Hello hello How are you? How are you? Thank you thank you
执行以下命令:
uniq coder-helper.txt
输出内容如下:
Hello hello How are you? Thank you thank you
再加上-i参数:
uniq -i coder-helper.txt
输出内容如下:
Hello How are you? Thank you
大家看到了,输出的是有重复行的第一行内容。且忽略了大小写。
仅打印没有重复行的内容
如果你只想查看文件中的唯一行,可以使用-u参数。假如原始内容如下:
cat coder-helper.txt Hello Hello Good morning How are you? How are you? Thank you Thank you Bye
执行以下指令:
uniq -u coder-helper.txt Good morning Bye
排序并查找重复项
有时,重复条目可能包含在文件的不同位置。
在这种情况下,如果我们简单地使用uniq命令,它将不会检测到不同行中的这些重复条目。
因此,我们首先需要对文件进行排序,然后才能找到重复项。
假如文本内容如下:
cat coder-helper.txt Adam Sara Frank John Ann Matt Harry Ann Frank John
我们使用管道,先排序文件,然后统计重复行计数。执行以下指令:
sort coder-helper.txt | uniq -c
输出内容如下:
1 Adam 2 Ann 2 Frank 1 Harry 2 John 1 Matt 1 Sara
保存筛选内容到其他文件
当然可以使用管道重定向,但是uniq也提供了把筛选内容保存的文件的功能。假如内容如下:
cat coder-helper.txt Hello Hello How are you? Good morning Good morning Thank you
筛选出没有重复的项:
uniq -u coder-helper.txt
输出内容如下:
How are you? Thank you
uniq最后一个位置,定义的是输出文件名。
uniq -u coder-helper.txt result.txt
查看并输出result.txt内容。
cat result.txt How are you? Thank you
忽略开头的字符
要忽略开头的几个字符,可以使用-s参数,但需要指定需要忽略的字符数。假如内容如下:
cat coder-helper.txt Aapple Bapple Cpears Dbanana Ebanana
我们忽略首字母进行排重:
uniq -s 1 coder-helper.txt
输出内容如下:
Aapple Cpears Dbanana
写在最后
配合管道符灵活运用,把uniq的功能发挥到极致吧。
Happy coding :-)