我有2個文件。如何從兩個文本文件保留唯一的行,丟棄重複項?
例如,文件#1的內容是:
hi1
hi2
hi4
...的文件#2:
hi1
hi4
hi3
hi5
我想整理一下這些文件,使第三個文件會包含只是:
hi2
hi3
hi5
任何人都可以在正確的方向折騰嗎?我迫切需要!需要Perl,但接受C/C++。
我有2個文件。如何從兩個文本文件保留唯一的行,丟棄重複項?
例如,文件#1的內容是:
hi1
hi2
hi4
...的文件#2:
hi1
hi4
hi3
hi5
我想整理一下這些文件,使第三個文件會包含只是:
hi2
hi3
hi5
任何人都可以在正確的方向折騰嗎?我迫切需要!需要Perl,但接受C/C++。
這裏有一小段代碼來做你想做的事情。沒有錯誤檢查,我假設你的文本文件不是很大,以至於你將所有文本加載到散列數組中,從而導致內存不足。
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";
}
}
這是沿着我想要的路線;然而輸出是這樣的:hi2 hi3 hi4hi4 hi5 – 2011-03-03 03:37:29
啊,那麼我們需要剝離EOL並將其放回底部。我會糾正這個咒語。 – darklion 2011-03-03 03:47:12
完美!謝謝,快速反應! – 2011-03-03 04:04:04
仍然不確定是否完全描述了問題。 hi3不重複,但hi4是。所以應該輸出包含hi3而不是hi4?提示:要在Perl中檢測重複項,您可能需要使用散列。
對不起,我在一個網站... – 2011-03-03 03:33:19
我知道你問的Perl或C,但在UNIX(或MKS或同等的Unix在Windows工具包):
sort file1 file2 | uniq -u > file3
它沒有什麼比這更簡單。
計數每行,然後打印出的人在計數爲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;
爲什麼不'hi2'呢? – 2011-03-03 02:58:23
對不起,我在校對時發現了這個,謝謝你的通知。 – 2011-03-03 02:58:59