2015-12-26 49 views
0

我有两个源文件(英文文件和意大利文件)与相同的行数,我执行awk command删除IT.txt文件中的所有行超过2个字使用awk删除2个过滤文件中的重复项

EN.txt 
Santa Claus 
Pigs don't fly 
The son of the father 
Elf 
Santa Claus 
Elf 
Sabatons 
Shoes 

IT.txt 
Babbo Natale 
I maiali non volano 
Il figlio del padre 
Elfo 
Babbo Natale 
Elfo 
Scarpe 
Scarpe 

所以基本上我都有这样的输出:

EN.txt 
Santa Claus 
Pigs don't fly 
The son of the father 
Elf 
Santa Claus 
Elf 
Sabatons 
Shoes 

IT.txt 
Babbo Natale 
Elfo 
Babbo Natale 
Elfo 
Scarpe 
Scarpe 

但在同一时间,我想从EN.txt文件中删除同一相关的字符串。我认为我可以处理行号(稍后,我发现了一个更好的解决方案),而不是运行另一个awk命令,以相同的方式删除EN文件中有两个以上单词的字符串,因为翻译可能与源字符串不同(比如有更多单词)。所以我需要将我的工作重点放在IT文件上,并且EN文件必须受到我启动的命令的影响。因此,我的滤波输出必须是这样的:

EN.txt 
Santa Claus 
Elf 
Santa Claus 
Elf 
Sabatons 
Shoes 

IT.txt 
Babbo Natale 
Elfo 
Babbo Natale 
Elfo 
Scarpe 
Scarpe 

这是我试图用(建议用前面的问题)命令和它完美的作品:awk 'NR==FNR{if(NF>3){a[NR]}else{a[NR]=1;print > "filtered_it.txt"}} NR!=FNR && a[FNR]{print > "filtered_en.txt"}' IT.txt EN.txt

但现在我想添加额外的在这个命令中,像删除重复项以获得类似这样的输出,但要小心那些意大利语可能具有相同翻译但它们各自的源字符串不同的行(如Sabatons翻译为Scarpe)。总之,我需要同时从两个文件中删除重复项(以某种方式),而不是从运行每个命令的单个文件中删除重复项。

EN.txt 
Santa Claus 
Elf 
Sabatons 
Shoes 

IT.txt 
Babbo Natale 
Elfo 
Scarpe 
Scarpe 
+0

这些主要数字是否真的出现在你的输入和输出文件中?如果是,那么编辑你的问题来说明,如果没有,那么编辑你的问题来删除它们。 –

+0

完成...它仅用于理解;) – JohnnyKing94

+0

将不存在于您的示例输入/输出文件中的文本放在一起并不能改进我们的理解! –

回答

2

你的规格很混乱,但我认为这是你想要的。另外,不是在两个文件上操作,如果它们应该逐行匹配,则首先更容易开始。

$ paste EN.txt IT.txt 
      | awk -F'\t' '{n=split($1,_," "); 
         m=split($2,_," ")} 
n<3 && m<3 && !a[$0]++ {print $1 > "f_EN.txt"; 
         print $2 > "f_IT.txt"}' 

$ cat f_EN.txt 
Santa Claus 
Elf 
Sabatons 
Shoes 

$ cat f_IT.txt 
Babbo Natale 
Elfo 
Scarpe 
Scarpe 

ps。你或者相信时间旅行是可能的,或者使用“明天”而不是“昨天”:)

+0

只是一件事,为EN.txt和IT.txt文件设置字数,这是不正确的...因为我可能有与英文源字符串相比,意大利语的意思是不同的和长的翻译...所以我改变了命令: '粘贴en.txt它。txt | awk -F'\ t''{n = split($ 1,_,“”); m = split($ 2,_,“”)} m <3 &&!a [$ 0] ++ {print $ 1>“f_EN.txt”;打印$ 2>“f_IT.txt”}'' 没关系我写了什么? – JohnnyKing94

+0

如果是这样,请删除相应的'split(..);'。请注意,根据输入订单,1美元是英语,2美元是意大利语。 – karakfa

+0

我在我的巨大语言文件上测试它,但我不知道我有一些小错误......有时它会收集超过3个字的字符串(并且它甚至不是完整的字符串,如截断为\ n),也许我需要使用分隔符时,我使用粘贴命令,以避免这些...我会让你知道,如果你有一些想法,告诉我 无论如何,命令崇拜与我写的例子,但现在我需要知道它是否适用于我的文件... – JohnnyKing94