Berikut ini adalah pendekatan skrip Perl satu baris. Ini bergantung pada penggunaan -a
flag yang memungkinkan auto-splitting saat ini membaca baris dengan -n
flag menjadi array @F
. Yang harus kita lakukan adalah beralih pada item-item itu, dan menambahkannya ke indeks masing-masing dalam $sum
array, sehingga secara efektif setiap item array adalah jumlah untuk setiap kolom masing-masing. Akhirnya, kami mencetak hasilnya dalam END
blok kode.
$ perl -lane '$j=0;foreach $i (@F){$sum[$j]+=$i; $j+=1;}; END{print join("\n",@sum)} ' input.txt
8
11
7
5
Atau, inilah pendekatan skrip Perl lengkap. Itu bergantung pada pemisahan setiap baris ke dalam array, dan iterasi atas setiap item dalam array yang menambahkan setiap nomor ke kepemilikan masing-masing dalam @sums
array. Script mencetak setiap baris, lalu menghasilkan laporan untuk setiap kolom. Pencetakan setiap baris dapat dihapus dengan menambahkan #
sebelumnyaprintf("%s",$line);
#!/usr/bin/env perl
use strict;
use warnings;
open(my $fh,"<",$ARGV[0]);
my $i = 0;
my @sums;
while(my $line = <$fh>) {
printf("%s",$line);
my @nums = split(" ",$line);
my $j = 0;
foreach my $num (@nums){
$sums[$j] += $num;
$j += 1;
}
}
my $k = 0;
foreach my $sum (@sums){
printf("- column %d sum: %d\n",$k,$sum);
$k+=1;
}
close($fh);
Penggunaannya sederhana chmod +x ./sum_columns.pl && ./sum_columns.pl input.txt
. Sebagai contoh:
$ ./sum_columns_2.pl input.txt
1 2
2 3
4 5 6
1 1 1 5
- column 0 sum: 8
- column 1 sum: 11
- column 2 sum: 7
- column 3 sum: 5