我有2个源文件(英文文件和意大利文件),相同行数,我执行awk command
删除IT.txt文件中的所有行有两个以上的单词
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文件中超过2个字的字符串,因为翻译可能与源字符串不同(比如有更多单词)。所以我需要将我的工作重点放在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 :(得分: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。您要么相信时间旅行,要么使用“明天”而不是“昨天”:)