簡體   English   中英

awk和sed同時執行

[英]Awk and sed command on the same time

我有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文件中刪除( 我不能再次使用eng文件上的awk,因為eng文件上的字數與IT文件不同 ,這只是一行數字工作)

THE OUTPUT EN FILE MUST BE
1 Santa Claus
2 Elf

有什么建議么? 如果不清楚,請詢問...

作為文件:

$ 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

這可能對您有用(GNU sed):

sed -rn 's/\S+//3;T;=' fileIT | sed 's/.*/&d/' | sed -f - fileEN

這使用IT文件來創建針對EN文件運行的sed文件。 第一個sed調用將輸出IT文件中一行中包含三個或更多單詞的任何行的行號。 第二次sed調用將行號轉換為sed命令以刪除該行號。 第三次sed調用從EN文件中刪除這些行號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM