Linux Shell如何删除重复的文本行

时间:2020-01-09 10:46:11  来源:igfitidea点击:

如何对日志文件中的数据进行排序,但是有太多重复的行。
如何在GNU/Linux下从文本文件中删除所有重复的行?
您需要使用Shell管道以及以下两个Linux命令行实用工具来排序和删除重复的文本行:

  • sort命令在Linux和类Unix系统中对文本文件行进行排序。
  • uniq命令在Linux或者Unix上导出或者省略重复的行

使用Sort,Uniq和Shell管道删除重复的行

使用以下语法:

sort {file-name} | uniq -u
sort file.log | uniq -u

使用uniq删除重复的行

这是一个使用cat命令显示的示例测试文件,名为garbage.txt:

cat garbage.txt

输出示例:

this is a test
food that are killing you
wings of fire
we hope that the labor spent in creating this software
this is a test
unix ips as well as enjoy our blog

在Linux上从文本文件中删除重复的行

执行以下命令以消除所有重复的行:

$ sort garbage.txt | uniq -u

输出示例:

food that are killing you
unix ips as well as enjoy our blog
we hope that the labor spent in creating this software
wings of fire

其中:

  • -u:检查是否有严格的顺序,删除所有重复的行。

在Linux上对文件内容进行排序

假设您有一个名为users.txt的文件:

cat users.txt

输出示例:

 24/10/72
Martin Lee 12/11/68
Sai Kumar  31/12/84
Marlena Summer 13/05/76
Wendy Lee  04/05/77
Sayali Gite 13/02/76
 24/10/72

让我们排序,运行:

sort users.txt

接下来按姓氏排序,运行:

sort +2 users.txt

是否要以相反的顺序排序?
尝试:

sort -r users.txt

您可以在订购文件时消除文件中的任何重复条目,运行:

sort +2 -u users.txt
sort -u users.txt

没有任何选项,排序将比较文件中的整行并以ASCII顺序输出它们。
您可以使用选项控制输出。

如何使用uniq命令删除Linux上的重复行

考虑以下文件:

cat -n telphone.txt

输出示例:

1	99884123
     2	97993431
     3	81234000
     4	02041467
     5	77985508
     6	97993431
     7	77985509
     8	77985509

uniq命令从文件中删除第8行,并将结果放置在名为output.txt的文件中:

uniq telphone.txt output.txt

验证一下:

cat -n output.txt

如何删除.txt文件中的重复行并将结果保存到新文件

尝试以下任何一种语法:

sort input_file | uniq > output_file
sort input_file | uniq -u | tee output_file