0

Perl を使用して CSV ファイルを処理しています。

5 番目のコンマで始まるすべての行で (改行文字を除く) すべてを削除するにはどうすればよいですか?

たとえば"a,b,c,d,e,f,g,h,i,\n"、 になり"a,b,c,d,e\n"ます。

$entire_csv_file_contents =~ s/what do I write here?//gm;

データには引用符で囲まれたフィールドなどが含まれないため、Text::CSVここで使用する必要はありません。

4

4 に答える 4

3

例えば:

$entire_this_is_not_csv_file_contents =~ s/^(([^,]+,){4}[^,]+).*/$1/gm;

perl 5.8.x との互換性が必要ない場合は、\Kエスケープを使用できるため、キャプチャは必要ありません (amon さんの提案に感謝します):

$entire_this_is_not_csv_file_contents =~ s/^(?:[^,]+,){4}[^,]+\K.*//gm;

また、フィールドが空かどうかに応じて、ここの「+」を「*」に置き換える必要があります (これも amon に感謝します)。

于 2013-07-19T06:29:57.250 に答える
2

正規表現を使用しないでください。コンマまたはエスケープされた引用符を含む引用符付きフィールドの可能性に対処する必要があります。

代わりに、Perl モジュールText::CSVを使用して入力行をフィールドに正しく解析し、関心のあるフィールドのみを出力します。

于 2013-07-19T05:38:36.797 に答える
0

これはperlではありませんが、役立つかもしれません:

cut -d, -f1-5 test.csv
于 2013-07-19T04:10:10.343 に答える