Как сохранить уникальные строки из двух текстовых файлов, исключая дубликаты? - PullRequest
0 голосов
/ 03 марта 2011

У меня есть 2 файла.

Например, содержимое файла # 1:

hi1
hi2
hi4

… файла # 2:

hi1
hi4
hi3
hi5

Я хотел бы отсортировать эти документы так, чтобы третий файл содержал только:

hi2
hi3
hi5

Может кто-нибудь бросить меня в правильном направлении?Я остро нуждаюсь!Perl требуется, но C / C ++ принят.

Ответы [ 4 ]

5 голосов
/ 03 марта 2011

Я знаю, что вы просили Perl или C, но в Unix (или с MKS или эквивалентным Unix для Windows Toolkit):

sort file1 file2 | uniq -u > file3

Это не намного проще, чем это.

2 голосов
/ 03 марта 2011

Вот небольшой фрагмент кода, чтобы сделать то, что вы хотите.Там нет проверки ошибок, и я предполагаю, что ваши текстовые файлы не так велики, что вы исчерпаете память, загрузив весь текст в массив хешей.

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";
    }
}
0 голосов
/ 03 марта 2011

Подсчитайте каждую строку, затем распечатайте те, в которых число равно единице:

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

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

print sort grep $lines{$_} == 1, keys %lines;
0 голосов
/ 03 марта 2011

Все еще не уверен, что вы описываете проблему полностью.hi3 не дублируется, но hi4 есть.Так должен ли вывод содержать hi3 вместо hi4?Подсказка: чтобы обнаружить дубликаты в perl, вы, вероятно, захотите использовать хеш.

...