我有2个文件,英文文件(源文件)和意大利文件(目标文件)。它们都具有相同行数。我运行awk 'NF<3'
删除我的意大利文件中超过2个单词的所有字符串,但同时我想删除从英文文件中的意大利文件中删除的特定源字符串(我以为我可以在线号上工作)。当然,我必须对源字符串的行号执行sed
命令(导致两个文件中的字符串不同),但我不知道如何在我使用时同时执行此操作awk
从意大利文件中删除这些字符串,因为当我启动命令时,我丢失了文件中的等效行号。
实施例
EN
1 Santa Claus
2 Pigs don't fly
3 The son of the father
4 Elf
IT
1 Babbo Natale
2 I maiali non volano
3 Il figlio del padre
4 Elfo
I run awk on IT file
OUTPUT FILE
IT
1 Babbo Natale
4 Elfo
IT文件中用awk
删除的行也需要从EN文件中删除(我不能再在aw文件上使用awk,因为eng文件上的字数是与IT文件不同,它只是一个行号工作)
THE OUTPUT EN FILE MUST BE
1 Santa Claus
2 Elf
有什么建议吗? 如果不清楚,请询问......
答案 0 :(得分:4)
拥有源文件:
$ cat it.dat
Babbo Natale
I maiali non volano
Il figlio del padre
Elfo
$ cat en.dat
Santa Claus
Pigs don't fly
The son of the father
Elf
这awk
:
awk 'NR==FNR{if(NF>3){a[NR]}else{a[NR]=1;print > "filtered_it.dat"}}
NR!=FNR && a[FNR]{print > "filtered_en.dat"}' it.dat en.dat
<强>结果
$ cat filtered_id.dat
Babbo Natale
Elfo
$ cat filtered_en.dat
Santa Claus
Elf
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -rn 's/\S+//3;T;=' fileIT | sed 's/.*/&d/' | sed -f - fileEN
这使用IT文件创建一个针对EN文件运行的sed文件。第一个sed调用输出IT文件中一行中有三个或更多单词的任何行的行号。第二个sed调用将行号转换为sed命令以删除该行号。第三个sed调用从EN文件中删除这些行号。