0

CSVファイルの行の列数を数えたい。

行110列
行211列など。

最後の列の値を出力できますが、実際には行ごとのカウントが必要です。

perl -F, -lane "{print @keys[$_].$F[$_] foreach(-1)}" < testing.csv

私はWindowsマシンを使用しています

ありがとう。

4

2 に答える 2

4

適切な csv ファイルがある場合は、区切り文字 ( など1,"foo,bar",2) を埋め込むことができます。この場合、単純な分割では十分ではありません。Text::CSV モジュールは、次のようなワンライナーでかなり簡単に使用できます。

バージョンのコピー/貼り付け:

perl -MText::CSV -lwe"my $c=Text::CSV->new({sep_char=>','}); while($r=$c->getline(*STDIN)) { print scalar @$r }" < sorted.csv

読み取り可能なバージョン:

perl -MText::CSV            # use Text::CSV module
     -lwe                   # add newline to print, use warnings
         "my $c = Text::CSV->new();             # set up csv object 
          while( $r = $c->getline(*STDIN) ) {   # get lines from stdin
              print scalar @$r                  # print row size
          }" < sorted.csv                       # input file to stdin

入力が不安定になる可能性がある場合、Text::CSV->getline は破損した行で詰まる可能性があります (whileループが終了します)。その場合、単純な解析を使用する方が安全な場合があります。

perl -MText::CSV -nlwe"
    BEGIN { $r = Text::CSV->new() }; 
    $r->parse($_); 
    print scalar $r->fields
" comma.csv

この場合、別の入力方法を使用することに注意してください。これはgetline()、ファイル ハンドルが必要ですが、必要parse()ないためです。ダイヤモンド演算子は、引数に応じて ARGV または STDIN のいずれかを使用するため、明示的に記述した方がよいことがわかりました。

于 2013-01-31T19:20:04.903 に答える
0

フィールドの一部としてコンマがない場合はsplit、行を入力してフィールドの数を数えることができます

#! /usr/bin/perl

use strict;
use warnings;

my @cols = split(',', $_);
my $n = @cols;
print "row $. $n columns\n";

あなたはこれを呼び出すことができます

perl -n script.pl testing.csv
于 2013-01-31T19:02:17.487 に答える