2016-10-03 16 views
-2

こんにちは私は大量のデータを扱うプロジェクトに取り組んでいます。私は約2 GBのキー値のペアを持つテキストファイルを持っていて、各キーには複数の値があります。 特定の機能をテストするためのキーが必要なので、私は別のファイルのすべてのキーを抽出する必要があります。テキストファイルから特定のパターンの情報を抽出するためのスクリプト

ファイルの形式は次のとおりです。

:k: k1 :v: {XYZ:{id:"k1",score:0e0,tags:null},ABC:[{XYZ:{id:"k1",score:0e0,tags:null},PQR:[{id:"ID1",score:71.85e0,tags:[{color:"DARK"},{Type:"S1"},{color:"BLACK"}]},MetaData:{RuleId:"R3",Score:66.26327129015809e0,Quality:"GOOD"}},{XYZ:{id:"k1",score:0e0,tags:null},PQR:[..(same as above format)..],MetaData:{RuleId:"R3",Score:65.8234565409752e0,Quality:"GOOD"}} :: 

//same pattern repeats with different keys, and a new line 

私が検索した場合、 ":K:" CTRL + Fを使用してファイルに、これらのキーは強調します。だから、この種のパターンは、行の先頭を除いてファイル内のどこにもないと思います。

これらのように何千ものキーがあります。

そしてこれらのすべての鍵(k1、k2)をテスト用に別々のファイルに抽出します。

複数の行があります:k:と別のファイルで区切りたい(k1、k2、..)。これどうやってするの?

Pythonは私にとってもいいです。私はPythonで正規表現を使うこともできますし、 "sed"シェルコマンドを使うこともできます。これらを使ってキーを抽出する方法を教えてください。

誰かがシェル/パイソンスクリプトを書くのを助けることができますか?私は非常に些細なことは知っていますが、私はこの種のデータ処理の初心者です。

また、データが非常に大きいので、実行時間を最適化することにも焦点を当てます。

+0

私はそのことを非常に些細なものと呼んでいません。あなたはファイルの本当の例を提供できますか?( '...'を除く) –

+0

私は投稿を更新しました!あなたが知りたいことがあれば教えてください! – user2621826

+0

ファイル内の「最初の単語」(:k :)ごとに別々のファイルを作成しますか? ':k:'には複数の行がありますか?そうであれば、別々のファイルにすべての ':k:'レコード、最初のもの、最後のもの、または??? 。 (あなたの要件は不明です)。がんばろう。 – shellter

答えて

0

あなたは簡単に(1回のパスで)行うことができます

:k: k1 :v: {XYZ:{id: 
:k2: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
:k3: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 

のようなファイルを仮定し、応じて、次の出力

$ cat k 
:k: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
$ cat k2 
:k2: k1 :v: {XYZ:{id: 
$ cat k3 
:k3: k1 :v: {XYZ:{id: 

を与えていないメモリの制限

awk '{fName=$1; gsub(/:/,"",fName); print >> fName ; close(fName)}' inFile 

とどのように鍵を持っているかについては、close(fName)は必要ないかもしれませんが、あなたのオープンファイルの制限が何であるかをテストするならば、これはプロセスを実行する安全な方法です。

IHTH

関連する問題