Hier ist ein einzeiliger Perl-Skriptansatz. Dies beruht auf der Verwendung eines -a
Flags, das die automatische Aufteilung der aktuell gelesenen Zeile mit dem -n
Flag in ein Array ermöglicht @F
. Alles, was wir tun müssen, ist, diese Elemente zu durchlaufen und sie ihrem jeweiligen Index im $sum
Array hinzuzufügen. Somit ist effektiv jedes Array-Element eine Summe für die jeweilige Spalte. Schließlich drucken wir das Ergebnis innerhalb des END
Codeblocks.
$ perl -lane '$j=0;foreach $i (@F){$sum[$j]+=$i; $j+=1;}; END{print join("\n",@sum)} ' input.txt
8
11
7
5
Alternativ finden Sie hier einen vollständigen Perl-Skriptansatz. Es basiert darauf, jede Zeile in ein Array aufzuteilen und über jedes Element in diesem Array zu iterieren, wobei jede Zahl zu ihrem jeweiligen Besitz im @sums
Array hinzugefügt wird. Das Skript druckt jede Zeile aus und erstellt dann einen Bericht für jede Spalte. Drucken jeder Zeile kann entfernt werden , indem #
vorprintf("%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);
Die Verwendung ist einfach chmod +x ./sum_columns.pl && ./sum_columns.pl input.txt
. Zum Beispiel:
$ ./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