如何从文件中删除重复的行

Nat*_*man 15 unix command-line duplicates

我有一个生成测试并预测输出的工具.我的想法是,如果我失败了,我可以将预测与实际输出进行比较,看看它们分歧的地方.问题是实际输出包含两行,这令人困惑diff.我想删除重复项,以便我可以轻松地比较它们.基本上,类似sort -u但没有排序的东西.

是否有任何unix命令行工具可以执行此操作?

Mat*_*t J 24

uniq答案的补充,如果您不介意sort首先使用您的文件,这将非常有用.如果您需要删除不相邻的行(或者如果您想删除重复项而不重新安排文件),则以下Perl单行应该执行此操作(从此处窃取):

cat textfile | perl -ne '$H{$_}++ or print'
Run Code Online (Sandbox Code Playgroud)

  • 无用的猫奖!使用perl -ne ...无论...文本文件 (4认同)
  • 我从未听说过这个奖项!是的,我有时会毫无理性地使用猫; 我不知道为什么"cat x |"看起来比"<x"对我更好..它只是:)它可能与我经常重定向stdout以及"./的事实有关. prog <x> y"让我的眼睛流血:P (2认同)

The*_*aul 19

uniq的(1)

概要

uniq [OPTION] ... [INPUT [OUTPUT]]

描述

丢弃INPUT(或标准输入)中连续相同行中的所有行,写入OUTPUT(或标准输出).

或者,如果你想删除不相邻的重复行,perl的这个片段也会这样做:

while(<>) {
    print $_ if (!$seen{$_});
    $seen{$_}=1;
}
Run Code Online (Sandbox Code Playgroud)