如何保留两个文本文件中的唯一行,丢弃重复项?

时间:2011-03-03 02:57:09

标签: perl sorting duplicates line

我有2个文件。

例如,文件#1的内容是:

hi1
hi2
hi4
文件#2的

是:

hi1
hi4
hi3
hi5

我想整理这些文档,以便第三个文件只包含:

hi2
hi3
hi5

任何人都可以朝着正确的方向投掷我吗?我迫切需要!需要Perl,但接受C / C ++。

4 个答案:

答案 0 :(得分:5)

我知道你要求perl或C,但在Unix(或使用MKS或Windows上的等效Unix工具包):

sort file1 file2 | uniq -u > file3

它并没有那么简单。

答案 1 :(得分:2)

这是一个快速的代码来做你想要的。没有错误检查,我假设您的文本文件不是那么大,以至于通过将所有文本加载到哈希数组中而耗尽内存。

open(FILE1, "< file1.txt");
open(FILE2, "< file2.txt");

@file1 = <FILE1>;
@file2 = <FILE2>;

foreach $line (@file1, @file2)
{
    chomp($line);
    $TEXT{$line}++;
}

foreach $line (sort keys %TEXT)
{
    if ($TEXT{$line} == 1)
    {
         print $line . "\n";
    }
}

答案 2 :(得分:0)

计算每一行,然后打印出计数为1的那一行:

#!/usr/bin/perl
use warnings;
use strict;

local @ARGV = ('file.1', 'file.2');
my %lines;
while (<>) {
    $lines{$_}++;
}

print sort grep $lines{$_} == 1, keys %lines;

答案 3 :(得分:-1)

仍然不确定您是否完全描述了这个问题。 hi3不重复,但hi4是。那么输出应该包含hi3而不是hi4?提示:要检测perl中的重复项,您可能希望使用哈希。