关于uniq命令的7个例子:移除文本文件中的重复行


关于uniq命令的7个例子:移除文本文件中的重复行
 
Linux下的uniq命令可以对于处理文本文件中的重复行很有用,这个教程讲解了一些关于uniq命令最常用的用法,也许会对你有帮助。
 
下面的文件test将被用来作为测试文件以便讲解uniq命令是怎样工作的。
 
$ cat test
aa
aa
bb
bb
bb
xx
1. 基本用法
 
语法:
 
$ uniq [-options]
当uniq命令不加任何参数时,它将仅仅移除重复的行并将剩下的行打印出来:
 
$ uniq test
aa
bb
xx
2. 使用 -c 参数显示每行出现的次数
 
这个参数将显示文件中每行出现的次数。
 
$ uniq -c test
      2 aa
      3 bb
      1 xx
3. 使用 -d 参数仅打印出重复的行
 
这个参数将仅打印出文件中重复的行,如下所示,“xx”没有被打印出来,因为在测试文件中它不是一个重复的行。
 
$ uniq -d test
aa
bb
上面的例子打印出所有重复的行,但仅打印一次。但是,-D 参数将打印出全部的重复行。例如,“aa”在测试文件中出现的两次,那么在下面的示例中它就会被打印两次。
$ uniq -D test
aa
aa
bb
bb
bb
4. 使用 -u 参数只打印不重复的行
 
测试文件中只有“xx”行是不重复的,所以只有它会被打印出来。
 
$ uniq -u test
xx
 
5. 使用 -w 参数限制只比较每行的前N个字符
 
这个参数将会仅仅比较每行的前N个字符来判断其是否是重复行。在这个例子中,我们将使用下面的test2作为测试文件。
 
$ cat test2
hi Linux
hi LinuxU
hi LinuxUnix
hi Unix
下面的命令使用 -w 参数比较每行的前8个字符,然后使用 -c 参数打印每行出现的次数。
$ uniq -c -w 8 testNew
  3 hi Linux
  1 hi Unix
下面的命令使用 -w 参数比较每行的前8个字符,然后使用 -D 参数打印所有重复的行。
$ uniq -D -w 8 testNew
hi Linux
hi LinuxU
hi LinuxUnix
6. 使用 -s 参数忽略每行的前N个字符
 
使用这个参数在比较时将会忽略每行的前N个字符。在这个示例中,我们将使用下面的test3作为测试文件。
 
$ cat test3
aabb
xxbb
bbc
bbd
下面的命令使用 -s 忽略每行的前2个字符,然后使用 -D 参数打印出所有重复的行。
这个示例中每行前2个字符,如第一行中的“aa”和第二行中的“xx”将会被忽略,而这两行的后两个字符“bb”是一样的,所以这两行被看作是重复行而被打印出来。
 
$ uniq -D -s 2 test3
aabb
xxbb
7. 使用 -f 参数忽略每行的前N个域
 
这个参数与 -s 类似,但是忽略的不是字符,而是‘域’,‘域’默认用空格分隔。
 
$ cat test2
hi hello Linux
hi friend Linux
hi hello LinuxUnix
下面的命令将会忽略每行的前两个‘域’,再用 -D 参数打印出重复的行。
这个示例中第一行的“hi hello”和第二行的“hi friend”是前两个域,故不会被比较,而这两行的下一个域“Linux”是一样的,所以这两行被认为是重复行。
 
$ uniq -D -f 2 test2
hi hello Linux
hi friend Linux
 

相关内容

    暂无相关文章