4

他の多くのファイルからデータを取得して、大きな (~200MB) 一括 SQL 挿入ステートメントを作成するプログラムがあります。

INSERT INTO ...
VALUES
('a','b',1,2,3),
('c','d',4,5,6),

残念ながら、最後の行はコンマではなくセミコロンで終わる必要があります。(理想的には私の perl プログラム内で) 最後の文字だけを a から a,に変える方法はあり;ますか?

私が試したこと:

1) ファイルが終了して閉じられた後:

open(DAT,">>$output") || die("Cannot Open File");
seek(DAT, 2, SEEK_END); 
print DAT ";"; 
close(DAT);

これは、最後にセミコロンを置くだけです。

`perl -p -i -e 's/,$/;/g' $output`;2)私の perl プログラム内から呼び出していますが、これはすべてのコンマを置き換えています。

3) 最後の行を印刷するときは、コンマではなくセミコロンで終了します。ただし、行が書き込まれるまで最後の行であることが実際にはわからないため、これは機能しません。

;4) 最後の文字が aではなく a であることを除いて、ファイル全体を新しいファイルにコピーします,。ただし、これは遅いため、理想的ではありません。

4

3 に答える 3

1

あなたがしようとした

perl -p -i -e 's/,$/;/g' 

ファイル内のすべての行にこの置換が適用されます。-0一度だけ行うには、スイッチを使用してファイルを丸呑みします。

perl -0777 -pi -e 's/,$/;/'

これは、最後の文字がカンマの場合にのみ一致します (オプションで末尾に改行があります)。末尾に空白やその他の文字があると、機能しません。

于 2013-04-09T18:04:36.927 に答える