CSVファイルの行の列数を数えたい。
行110列
行211列など。
最後の列の値を出力できますが、実際には行ごとのカウントが必要です。
perl -F, -lane "{print @keys[$_].$F[$_] foreach(-1)}" < testing.csv
私はWindowsマシンを使用しています
ありがとう。
適切な 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 のいずれかを使用するため、明示的に記述した方がよいことがわかりました。
フィールドの一部としてコンマがない場合は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