2015-12-26 48 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