しばらくの間、1つの問題を解決しようとしていましたが、成功しませんでした。最初は些細な問題のように見えますが、私はそれを積み重ねてきました...
とにかく、次の問題を解決する必要があります。次の形式の行を含む非常に大きな CSV ファイルがあります。
NUMBER(9);NUMBER(1);NUMBER(9-10);NUMBER(2);NUMBER(1);...;NUMBER(2);NUMBER(1);STRING;DATE(DD.MM.YYYY);NUMBER(1351)
例えば:
517755369;1;0001303717;48;1;63;8;50;2;51;6;53;7;55;3;57;4;59;5;;;;;CALL;07.12.2012;1351
最初のツリー フィールドの後の各行には、1 ~ 10 のペアNUMBER(2);NUMBER(1)
があり、その後に別の 3 つのフィールドが続きますSTRING;DATE(DD.MM.YYYY);NUMBER(1351)
。
そのファイルを次の構造のファイルに変換する必要があります。
517755369;1;0001303717;48;1;CALL;07.12.2012;1351
517755369;1;0001303717;63;8;CALL;07.12.2012;1351
517755369;1;0001303717;50;2;CALL;07.12.2012;1351
517755369;1;0001303717;51;6;CALL;07.12.2012;1351
517755369;1;0001303717;53;7;CALL;07.12.2012;1351
517755369;1;0001303717;55;3;CALL;07.12.2012;1351
517755369;1;0001303717;57;4;CALL;07.12.2012;1351
517755369;1;0001303717;59;5;CALL;07.12.2012;1351`
したがって、入力ファイルの各行は、元の行のNUMBER(2);NUMBER(1)
ペアと同じ数の行に変換する必要があります。
入力ファイルのサンプルを次に示します。
517760344;2;000601301061;31;1;;;;;;;;;;;;;;;;;;;CALL;07.12.2012;1351
518855369;1;000601303717;48;1;63;8;50;2;51;6;53;7;55;3;57;4;59;5;;;;;CALL;07.12.2012;1351
519775067;1;000601300771;4;2;6;3;19;1;;;;;;;;;;;;;;;CALL;07.12.2012;1351
617773407;1;000603252922;13;1;17;2;27;3;;;;;;;;;;;;;;;CALL;07.12.2012;1351
717764779;1;000601304021;31;1;;;;;;;;;;;;;;;;;;;CALL;07.12.2012;1351`
一般に、 sedまたはawk (または入力ファイルに対して実行できるperlスクリプト)で使用できる正規表現が必要です。元の入力ファイルには、およそ 1 ~ 150 万のレコードがあります。このタスクはできるだけ早く終了する必要があります (変換には最大 5 分かかります)。
ありがとう