📜  LINUX 中的 uniq 命令示例

📅  最后修改于: 2022-05-13 01:57:34.787000             🧑  作者: Mango

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 命令的选项:

  1. -c – -count :它通过显示一个数字作为该行的前缀来告诉该行重复了多少次。
  2. -d – -repeated :它只打印重复的行,不打印不重复的行。
  3. -D – -all-repeated[=METHOD] :它打印所有重复的行并且 METHOD 可以是以下任何一种:
    • none :根本不分隔重复的行。这是默认设置。
    • prepend :在每组重复行之前插入一个空行。
    • 单独 :在每组重复行之间插入一个空行。
  4. -f N – -skip-fields(N) :它允许您在确定一行的唯一性之前跳过一行的N 个字段(一个字段是一组字符,由空格分隔)。
  5. -i – -ignore case :默认情况下,所做的比较区分大小写,但使用此选项可以进行不区分大小写的比较。
  6. -s N – -skip-chars(N) :它在确定唯一性时不比较每行的前 N 个字符。这类似于 -f 选项,但它跳过单个字符而不是字段。
  7. -u – -unique :它允许您仅打印唯一的行。
  8. -z – -zero-terminated :它将使一行以 0 字节(NULL)结束,而不是换行符。
  9. -w N – -check-chars(N) :它只比较一行中的 N 个字符。
  10. – – 帮助:显示帮助信息并退出。
  11. – – 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