3

次のような入力 CSV ファイルがあります。

SD-32MM-1001,"100.00",4/11/2012
SD-32MM-1001,"1,000.00",4/12/2012

他の処理パイプライン ( ) の数値の書式設定を取り出す必要がありますpostgresql COPY

引用符で囲まれた文字列を覗き込むことなく、FS の列を分離するテキスト フィルターはありますか? 現在私は得る:

$ tail +2 /tmp/foo.csv|awk -F, '{print NF}'
3
4

同様に、cut

私はLinuxにとどまらなければなりません。

ありがとう。

4

3 に答える 3

3

GNU awk はこれを処理できますFPAT。フィールドと見なすものを記述するために設定する必要があります。

$ awk '{print NF}' FPAT="([^,]+)|(\"[^\"]+\")" file
3
3

$ awk '{print $2}' FPAT="([^,]+)|(\"[^\"]+\")" file
"100.00"
"1,000.00"
于 2013-04-19T18:05:27.600 に答える
1

スクリプトと適切なパーサーを使用する(良い解決策: awk & cut は、この特定のニーズには適していません):

use strict; use warnings;

use Text::CSV;

my @rows;
my $csv = Text::CSV->new ()
                or die "Cannot use CSV: ".Text::CSV->error_diag ();

open my $fh, "<:encoding(utf8)", "/tmp/file.csv" or die "$!";
while ( my $row = $csv->getline( $fh ) ) {

    # printing line 2, last field
    $. == 2 and print $row->[-1];
}
$csv->eof or $csv->error_diag();
close $fh;

出力

4/12/2012
于 2013-04-19T17:56:00.227 に答える