2011-06-20 36 views
1

因此可以說我有5個文件:f1,f2,f3,f4,f5。我如何從所有5個文件中刪除共同字符串(所有文件中的相同文本),並將它們放到第6個文件f6中?請告訴我。從多個文件中剪切常見字符串並將它們粘貼到另一個文件中

格式的文件:

property.a.p1=some string 
property.b.p2=some string2 
      . 
      . 
      . 
property.zzz.p4=123455 

所以,如果上面是從文件1和文件2至5摘錄也有串在其中property.a.p1=some string,然後我想刪除從文件1到5的字符串並將其放入文件6.每個文件的每一行都在一個新行中。因此,我會逐一比較換行符上的每個字符串。每個文件大約400到600行。

我發現這個在論壇上使用紅寶石兩個文件刪除常見的字符串: $ ruby -ne 'BEGIN {a=File.read("file1").split(/\n+/)}; print $_ if a.include?($_.chomp)' file2

+1

'common strings'? – Dogbert

+0

如果文件1,文件2,文件3,文件4和文件5都包含字符串'hello world',那麼它應該從所有5個文件中刪除並附加到第6個文件。 – TookTheRook

+2

這是逐行/逐字的基礎,還是在字面上試圖考慮每個文件的每個可能的子字符串? –

回答

2

看看這是否做你想要的。這是一個「雙通」解決方案,第一遍使用散列表來查找公共線,第二遍使用它來篩選出與公共匹配的所有行。

$files = gci "file1.txt","file2.txt","file3.txt","file4.txt","file5.txt" 

$hash = @{} 
$common = new-object system.collections.arraylist 

foreach ($file in $files) { 
get-content $file | foreach { 
$hash[$_] ++ 
} 
} 

$hash.keys |% { 
if ($hash[$_] -eq 5){[void]$common.add($_)} 
} 


$common | out-file common.txt 

[regex]$common_regex = ‘^(‘ + (($common |foreach {[regex]::escape($_)}) –join 「|」) + ‘)$’ 

foreach ($file in $files) { 
$new_file = get-content $file |? {$_ -notmatch $common_regex} 
$new_file | out-file "new_$($file.name)" 
} 
+0

gci是get-childitem的powershell別名。 – mjolinor

+0

我最終用Java編寫了解決方案。我認爲這樣做是有效的,但希望在比較字符串的同時執行更多的限制,而不是。感謝您的輸入! – TookTheRook

0

在SQL數據庫中像這樣創建一個表:

create table properties (
    file_name varchar(100) not null, -- Or whatever sizes make sense 
    prop_name varchar(100) not null, 
    prop_value varchar(100) not null 
) 

然後用一些簡單的分析您的文件正則表達式甚至只是split

prop_name, prop_value = line.strip.split('=') 

轉儲分析數據到表,做一點SQL的發現是所有文件的屬性:

select prop_name, prop_value 
from properties 
group by prop_name, prop_value 
having count(*) = $n 

$n由輸入文件數代替。現在您有一個所有常用屬性及其值的列表,將它們寫入新文件,將它們從properties表中刪除,然後遍歷properties中剩下的所有行,並將它們寫入相應的文件(即文件由file_name列命名)。

你說這些文件是「巨大的」,所以你可能不想同時把它們全部寫入內存。你可以做多次傳遞並使用磁盤散列庫來跟蹤已經看到的和在哪裏,但是如果你有一個SQL數據庫並且每個人都應該有,至少,SQLite在周圍踢。管理大量的結構化數據是SQL和數據庫的用途。

相關問題