linux - 删除两个句子对齐文件中的重复行,Linux

标签 linux bash awk sed duplicates

我在两个文件(一个是德语,另一个是英语)中有一个平行语料库,其中句子是对齐的。这意味着在一个文件的每一行中,另一个文件中的同一行包含它的翻译。

然而,在德语语料库中,一些句子仍然是英文的(或者它们只是奇怪的标签)例如:

file.en, line 500: The house is small    file.de, line 500: Das Haus ist klein
file.en, line 501: The cat is big        file.de, line 501: The cat is big
file.en, line 444: EMEA/CVMP/424/01      file.de, line 444: EMEA/CVMP/424/01

因为我需要保留句子的顺序,所以我想检测此类重复项 (string1 == string2) 并将它们从两个文件中删除,以便句子之后仍然对齐。

我见过一些使用 awk 的解决方案,但没有一个符合我的问题。

有什么想法吗?

注意:文件有几百万行。

最佳答案

您可以使用一个小的 perl 脚本,它不需要在内存中存储任何内容,只需要存储直接行。

只是逐行比较两个文件,只打印不同的文件。

use warnings;
use strict;


open(my $fh1,'<','file');
open(my $fh2,'<','file2');
open(my $fh3,'>','outfile');
open(my $fh4,'>','outfile2');

while (my $line  = <$fh1>){
        my $line2 = <$fh2> ;
        if($line ne $line2){
                print $fh3 $line;
                print $fh4 $line2;
        }
}

用作

perl script.pl

关于linux - 删除两个句子对齐文件中的重复行,Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38245552/

相关文章:

linux - 这个 awk 脚本是做什么的?

php - 在 PHP 中使用实时输出运行进程

linux - 使用 bash 脚本从文件中读取元素

linux - 我在 bash 代码中使用 awk 语句时遇到一些困难

bash - MSYS2 和 Cygwin 的区别

linux - ctrl+c 不杀死后台功能

linux - 匹配 csv 中的列并合并

linux - 无法在家中使用 mkdir 创建文件夹/子文件夹

linux - xdg-open 不打开牛仔裤

c++ - 为什么需要将 'this' 指针作为 'arg' 参数传递给 pthread_create