LINUX 中的 uniq 命令示例
Linux 中的uniq命令是一个命令行实用程序,用于报告或过滤掉文件中的重复行。
简单来说, uniq是帮助检测相邻重复行并删除重复行的工具。 uniq从输入文件中过滤掉相邻的匹配行(需要作为参数)并将过滤后的数据写入输出文件。
uniq 命令的语法:
//...syntax of uniq...//
$uniq [OPTION] [INPUT[OUTPUT]]
这个语法很容易理解。这里, INPUT是指需要过滤掉重复行的输入文件,如果未指定 INPUT,则uniq从标准输入中读取。 OUTPUT是指输出文件,您可以在其中存储由uniq命令生成的过滤输出,对于 INPUT,如果未指定 OUTPUT,则uniq写入标准输出。
现在,让我们通过一个例子来理解 this 的用法。假设您有一个名为 kt.txt 的文本文件,其中包含需要省略的重复行。这可以简单地用 uniq 来完成。
//displaying contents of kt.txt//
$cat kt.txt
I love music.
I love music.
I love music.
I love music of Kartik.
I love music of Kartik.
Thanks.
现在,我们可以看到上面的文件包含多个重复的行。现在,让我们使用 uniq 命令删除它们:
//...using uniq command.../
$uniq kt.txt
I love music.
I love music of Kartik.
Thanks.
/* with the use of uniq all
the repeated lines are removed*/
正如您所看到的,我们在上面的 uniq 示例中仅使用了输入文件的名称,并且由于我们没有使用任何输出文件来存储生成的输出,因此 uniq 命令在标准输出上显示了过滤后的输出以及所有重复的行移除。
注意: uniq无法检测到重复的行,除非它们彼此相邻。因此,在使用 uniq 之前必须对文件中的内容进行排序,或者您可以简单地使用sort -u而不是 uniq 命令。
uniq 命令的选项:
- -c – -count :它通过显示一个数字作为该行的前缀来告诉该行重复了多少次。
- -d – -repeated :它只打印重复的行,不打印不重复的行。
- -D – -all-repeated[=METHOD] :它打印所有重复的行并且 METHOD 可以是以下任何一种:
- none :根本不分隔重复的行。这是默认设置。
- prepend :在每组重复行之前插入一个空行。
- 单独 :在每组重复行之间插入一个空行。
- -f N – -skip-fields(N) :它允许您在确定一行的唯一性之前跳过一行的N 个字段(一个字段是一组字符,由空格分隔)。
- -i – -ignore case :默认情况下,所做的比较区分大小写,但使用此选项可以进行不区分大小写的比较。
- -s N – -skip-chars(N) :它在确定唯一性时不比较每行的前 N 个字符。这类似于 -f 选项,但它跳过单个字符而不是字段。
- -u – -unique :它允许您仅打印唯一的行。
- -z – -zero-terminated :它将使一行以 0 字节(NULL)结束,而不是换行符。
- -w N – -check-chars(N) :它只比较一行中的 N 个字符。
- – – 帮助:显示帮助信息并退出。
- – – version :显示版本信息并退出。
带有选项的 uniq 示例
1. 使用 -c 选项:它告诉一行重复的次数。
//using uniq with -c//
$uniq -c kt.txt
3 I love music.
1
2 I love music of Kartik.
1
1 Thanks.
/*at the starting of each
line its repeated number is
displayed*/
2. Using -d option : It only prints the repeated lines.
//using uniq with -d//
$uniq -d kt.txt
I love music.
I love music of Kartik.
/*it only displayed one
duplicate line per group*/
3. 使用 -D 选项:它也只打印重复的行,而不是每组一个。
//using -D option//
$uniq -D kt.txt
I love music.
I love music.
I love music.
I love music of Kartik.
I love music of Kartik.
/* all the duplicate lines
are displayed*/
4. 使用 -u 选项:它只打印唯一的行。
//using -u option//
$uniq -u kt.txt
Thanks.
/*only unique lines are
displayed*/
5. 使用 -f N 选项:如上所述,这允许在比较行的唯一性时跳过 N 个字段。当行编号如下例所示时,此选项很有用:
//displaying contents of f1.txt//
$cat f1.txt
1. I love music.
2. I love music.
3. I love music of Kartik.
4. I love music of Kartik.
//now using uniq with -f N option//
$uniq -f 2 f1.txt
1. I love music.
3. I love music of Kartik.
/*2 is used cause we needed to
compare the lines after the
numbering 1,2.. and after dots*/
6. 使用 -s N 选项:这类似于 -f N 选项,但它跳过 N 个字符而不是 N 个字段。
//displaying content of f2.txt//
$cat f2.txt
#%@I love music.
^&(I love music.
*-!@thanks.
#%@!thanks.
//now using -s N option//
$uniq -s 3 f2.txt
#%@I love music.
*-!@thanks.
#%@!thanks.
/*lines same after skipping
3 characters are filtered*/
7.使用-w选项:类似于跳过字符的方式,我们也可以要求uniq将比较限制在一定数量的字符。为此,使用 -w 命令行选项。
//displaying content of f3.txt//
$cat f3.txt
How it is possible?
How it can be done?
How to use it?
//now using -w option//
$uniq -w 3 f3.txt
How
/*as the first 3 characters
of all the 3 lines are same
that's why uniq treated all these
as duplicates and gave output
accordingly*/
8. 使用 -i 选项:用于使比较不区分大小写。
//displaying contents of f4.txt//
$cat f4.txt
I LOVE MUSIC
i love music
THANKS
//using uniq command//
$uniq f4.txt
I LOVE MUSIC
i love music
THANKS
/*the lines aren't treated
as duplicates with simple
use of uniq*/
//now using -i option//
$uniq -i f4.txt
I LOVE MUSIC
THANKS
/*now second line is removed
when -i option is used*/
9. 使用 -z 选项:默认情况下,uniq 产生的输出以换行符终止。但是,如果您愿意,您希望有一个 NULL 终止的输出(在脚本中处理 uniq 时很有用)。这可以使用 -z 命令行选项来实现。
句法:
//syntax of using uniq
with -z option//
$uniq -z file-name
?list=PLqM7alHXFySFc4KtwEZTAngmyJm3NqS_L