以下に示すように、数百行のテキストファイルがあります。レコード数を抽出してまとめる方法を見つけようとしています。その後、答えを別のファイルに保存したいと思います。これが私が書こうとした最初のスクリプトです。
Record 4957 of message 1:
Record 3411 of message 1:
Record 2529 of message 1:
答え1
パール1行:
perl -ne '$c += $_ for m/(\d+)(?!=:)/g; }{ print $c' in.txt > out.txt
Perlスクリプト形式:
#!/usr/bin/perl
use warnings;
use strict;
my $infile = 'in.txt';
my $outfile = 'out.txt';
open my $fh, '<', $infile
or die $!;
my $count = 0;
while (my $line = <$fh>){
my @line_count = $line =~ m/(\d+)(?!=:)/g;
$count += $_ for @line_count;
}
close $fh or die $!;
open my $wfh, '>', $outfile
or die $!;
print $wfh $count;
close $wfh or die $!;
簡単な説明:次に追加されない限り、1行につき1つ以上の連続した整数のすべてのインスタンスを収集します:
。その後、これらの新しい値を追加するだけで変数が更新されます。
答え2
申し訳ありません。必要なawkの回答を調べる必要があります。
awk '{sum+=$2}END{print "There are "sum" records."}' in.txt
Ninjaエディタは、「レコード」を含む行のみを合計するようにします。
awk '$1=="Record"{sum+=$2}END{print "There are "sum" records."}' in.txt