1

非常に大きなxmlファイル(1.25 GB)があり、それらを処理できるようにするには、小さなファイルに分割する必要があります。このファイルには、タグが先頭と末尾にある言語データが含まれています。

<text id = "www.example.com>

</ text>

これらのタグで大きなファイルを分割したいと思います。たとえば、

<text id = "www.example.com>

こんにちは

</ text>

<text id = "www.example.com>

これは

</ text>

<text id = "www.example.com>

</ text>

基本的に3つの異なるファイルになります。開始と終了は「テキスト」タグでマークされます。例えば:

ファイル1

<text id = "www.example.com>

こんにちは

</ text>

ファイル2

<text id = "www.example.com>

これは

</ text>

ファイル3

<text id = "www.example.com>

</ text>

たとえば、これはPerlでスクリプトを作成することで実行できると思いますが、UNIXを使用してこのファイルを分割する「ワンストップショップ」の方法があるかどうか疑問に思っています。

splittingコマンドは、行やファイルサイズに応じて、大きなファイルを小さなファイルに分割するのに便利です。ただし、xmlタグによる分割を許可する同様のコマンドはありますか?

助けてくれてありがとう!

4

3 に答える 3

2

ここにある次のPERLプログラム:区切り文字に基づいて1つのファイルを複数のファイルに分割します

#!/usr/bin/perl
open(FI,"file.txt") or die;
$cur=0;
open(FO,">res.$cur.txt") or die;
while(<FI>)
{
    print FO $_;
    if(/^<\/text>/) # Added \
    {
        close(FO);
        $cur++;
        open(FO,">res.$cur.txt") or die;
    }
}
close(FO);

また、最大キャップなしで、トリックを行うようです。

乾杯。

于 2013-03-19T17:07:38.223 に答える
1

次のawkは問題を解決しますが、残念ながら約1000の出力ファイルで上限があります

awk '{print $0 ""> "file" NR}' RS='' input-file
于 2013-03-19T17:04:37.740 に答える
1

単純なawkコマンドよりもはるかに複雑で、ファイルが大きくなるかどうかはわかりませんが、XSLTV2.0スタイルシートを使用result-documentしてすべてのファイルを作成してみてください。

正規表現よりもXSLTを使用する利点の1つは、ファイル形式がわずかに変更された場合、または分割するノードに属性がある場合に、サポートが向上することです。

于 2013-03-19T17:09:35.663 に答える