2011-06-20 7 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 

したがって、上記の場合も、その中のproperty.a.p1=some string、その後、私は削除したい文字列を持っているファイル1とファイル2〜5からの抜粋です。ファイル1から5までの文字列をファイル6に入れます。各ファイルの各行は新しい行にあります。したがって、改行の各文字列を1つずつ比較しています。各ファイルは約400〜600行です。

私はルビーを使用して、2つのファイルから共通の文字列を除去するためのフォーラム上でこれを見つけた: $ ruby -ne 'BEGIN {a=File.read("file1").split(/\n+/)}; print $_ if a.include?($_.chomp)' file2

+1

'共通strings'? – Dogbert

+0

ファイル1、ファイル2、ファイル3、ファイル4、およびファイル5にすべて 'hello world'という文字列が含まれている場合は、5つのファイルすべてから削除して6番目のファイルに追加する必要があります。 – TookTheRook

+2

これは、行ごとに/単語ごとに行われますか、文字通り各ファイルのすべての部分文字列を考慮していますか? –

答えて

2

これが望ましいかどうかを確認してください。これは "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のビットを行う:$nは、入力ファイルの数によって置き換えられ

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

。今、あなたはすべての一般的なプロパティとその値のリストを持っているので、あなたの新しいファイルにそれらを書き、あなたのpropertiesテーブルからそれらを削除し、propertiesに残されているすべての行をスピンし、適切なファイルに書き込む(つまり、ファイル名はfile_nameです)。

あなたはおそらく同じ時にメモリにそれらのすべてを読ませたくないので、ファイルは「巨大」であると言います。あなたは複数のパスを実行することができ、ハッシュ・オン・ディスク・ライブラリを使用して、何が見られたのかを追跡し、どこにSQLデータベースがあればそれは時間の無駄になります。 。大量の構造化データを管理することは、SQLとデータベースのためのものです。

関連する問題