Windows 7を使用しているperlでフォローするためのロジックを取得するのを誰かが手伝ってくれませんか.
C:\script>perl split_concatenate.pl large_file a または b (入力は大きなファイルで、後で処理するための値 a または b)。
- ファイルが 40KB (ある程度のサイズ) を超えているかどうかを確認し、コマンドを実行しない場合は "a" を選択します
コマンド -i large_file.txt -o large_file_new -a
選択が b の場合
コマンド -i large_file.txt -o large_file_new -b
そうしないと
それが 40KB+ より大きい場合は、40KB ごとにファイルを分割し (part1 になります)、file_part2 にある最初の「特定の文字列」を part1 に追加します。複数の「特定の文字列」がある場合は、処理のために保存します。次に、次の部分の次の「特定の文字列」で終わる後続のファイルを作成します。(「特定の文字列」は何らかの文字列で始まりますが、異なる値で終わります)。そのため、スクリプトは「特定の文字列」がpart2程度にあるかどうかを検索し、最初に利用可能なものを追加する必要があります。利用可能なものが1つしかない場合は、分割する必要はありません。ファイルは常に特定の文字列で終わる必要があるため。
次に、同じコマンドを処理します
コマンド -i filepart1.txt -o filepart1.dat -a コマンド -i filepart2.txt - o filepart2.dat (必要な場合) -a
また
コマンド -i filepart1.txt -o filepart1.dat -b コマンド -i filepart2.txt - o filepart2.dat (必要な場合) -b
この後、連結する必要があります。
filepart1.dat + filepart2.dat + filepartN =large_file.dat を連結します。
以下のコードを使用して最初にサイズを見つけ始めました。
#!/usr/bin/perl
use strict;
use warnings;
use File::stat;
my $filesize = stat("Full_File.txt")->size;
print "Size: $filesize\n";
exit 0;
私が学ぶことができるように、誰かが助けてくれれば素晴らしいことです。これが不可能な場合は、@ 500 行ごとにファイルが 40KB に達するので、ファイルが 1000 未満の場合は、500 行ごとに次の利用可能な「特定の文字列」を追加し、上記のコマンドを分割して処理する方が簡単だと思います行は2つだけ分割され、すでにeofに1つあるため、part2に追加する必要はありません。もっと簡単かもしれませんか?
より良い説明:
large_file.txt
xxx
xxxx
xxxx
xxxxx
var:value_var_v(1234)
xxxxxx
xxxxx
xxxxx
var:value_var_v(4567)
xxxxxxx
xxxxxx
var:value_var_v(abcd)
xxxxxxx // first split happens here as here assume it is 40kb
xxxxxx
xxxxxxx
var:value_var_v(efgh)
これが大きすぎる場合は、5 行目で分割しますlarge_files_part1
。その末尾には が含まれている必要がありますvar:value_var_v(1234)
。5 行目以降は 9 行目で再び分割され、最後にlarge_files_part2
and hasになります。var:value_var_v(4567)
part3 は 12 行目まで進みvar:value_var_v(abcd)
、最後に含めます。最初の分割の後に 1つしかない場合var:value_var_v?
、両方の部分の行が約 500 である限り、2 つの部分だけで問題ありません。メイン ファイルに 1300 行ある場合、3 つの分割が必要です。各ファイルの末尾には、次に使用可能な「文字列」が必要です。したがって、1001 行目はvar:value_var_v(1234)
1000 行目以降で最初に使用可能になります。文字列は常に var:value_var_v で始まり、任意のもので終わります。これが明確であることを願っています。
予想される出力: 最初のケース: したがって、文字列が 1 回しか出現しない場合、_part1.txt は約 40,000 になります。
xxx
xxxx
xxxx
xxxxx
var:value_var_v(1234)
xxxxxx
xxxxx
xxxxx
var:value_var_v(4567)
xxxxxxx
xxxxxx
var:value_var_v(abcd)
xxxxxxx // split happened here
var:value_var_v(efgh)
_part2.txt
xxxxxxx
xxxxx
var:value_var_v(efgh)
これらのファイル (part1 と par2) に対して何らかの処理を行った後、再度連結します
_part1+_part2=ラージ+ファイル
連結後の最終的な大きなファイル:
xxx
xxxx
xxxx
xxxxx
var:value_var_v(1234)
xxxxxx
xxxxx
xxxxx
var:value_var_v(4567)
xxxxxxx
xxxxxx
var:value_var_v(abcd)
xxxxxxx // split happened here
var:value_var_v(efgh)
****
xxxxxxx
xxxxx
var:value_var_v(efgh)
2 番目の分割と連結のケース:
そのファイルが大きすぎて 80KB と言って、多くの文字列 "var:value_var() が最初の分割 @40KB の後にある場合、次の文字列が再び "var:value_var_v()" になる次の文字列を参照して分割を行います。それ以外の場合はサイズに基づいて、ファイル pat に次の使用可能な var:value_var_v() を含める必要があります。
元のファイル:
xxx
xxxx
xxxx
xxxxx
var:value_var_v(1234)
xxxxxx
xxxxx
xxxxx
var:value_var_v(4567)
xxxxxxx
- - // assume now split happens here as here assume it is 40kb there are two more strings starting with var:value_var_v, split after var:value_var_v(abcd) and print this string in previous parts eof. Then final part will be ending with var:value_var_v(efgh). keep as it is.
xxxxxx
xxxxxx
xxxxx
var:value_var_v(abcd)
xxxxxxx
xxxxxx
xxxxxxx
var:value_var_v(efgh)
part1.txt
xxx
xxxx
xxxx
xxxxx
var:value_var_v(1234)
xxxxxx
xxxxx
xxxxx
var:value_var_v(4567)
xxxxxxx - - // split happens here as here assume it is 40kb
var:value_var_v(abcd) - //prints next available string which is var:value_var_v(abcd)
_part2.txt
xxxxxx
xxxxxx
xxxxx
var:value_var_v(abcd)
// Here part1 and part2 ends with same string.
_part3.txt
xxxxxxx
xxxxxx
xxxxxxx
var:value_var_v(efgh) - This is last part and size should be below 40KB
これらの part1、part2、part3 をすべて処理してから、大きなファイルに連結します。
連結後の最終ファイル
完全なフィレは次のようになります。
xxx
xxxx
xxxx
xxxxx
var:value_var_v(1234)
xxxxxx
xxxxx
xxxxx
var:value_var_v(4567)
xxxxxxx // split happened here in the first split assumed 40KB
var:value_var_v(abcd)
******
xxxxxx
xxxxxx
xxxxx
var:value_var_v(abcd)
******
xxxxxxx
xxxxxx
xxxxxxx
var:value_var_v(efgh)
******
PS: 各部分で最後に処理されると、一意の値を取得し、連結中にそのまま保持します。