ต่อไปนี้เป็นวิธีสคริปต์ Perl แบบหนึ่งบรรทัด สิ่งนี้อาศัยการใช้-a
แฟล็กซึ่งอนุญาตให้แยกบรรทัดที่อ่านโดยอัตโนมัติในขณะนี้พร้อมกับ-n
ตั้งค่าสถานะเป็นอาเร@F
ย์ สิ่งที่เราต้องทำคือวนซ้ำไอเท็มเหล่านั้นและเพิ่มลงในดัชนีตามลำดับใน$sum
อาเรย์ดังนั้นประสิทธิภาพของไอเท็มอาเรย์แต่ละตัวจึงเป็นผลรวมสำหรับแต่ละคอลัมน์ ในที่สุดเราจะพิมพ์ผลลัพธ์ภายใน END
บล็อคโค้ด
$ perl -lane '$j=0;foreach $i (@F){$sum[$j]+=$i; $j+=1;}; END{print join("\n",@sum)} ' input.txt
8
11
7
5
หรือนี่คือวิธีการสคริปต์ Perl แบบเต็ม มันอาศัยการแยกแต่ละบรรทัดเป็นอาร์เรย์และวนซ้ำแต่ละรายการในอาร์เรย์นั้นเพิ่มจำนวนแต่ละหมายเลขไปยังการครอบครองตามลำดับใน@sums
อาร์เรย์ สคริปต์พิมพ์แต่ละบรรทัดจากนั้นสร้างรายงานสำหรับแต่ละคอลัมน์ การพิมพ์ของแต่ละบรรทัดสามารถลบออกได้โดยเพิ่ม#
ก่อนprintf("%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);
chmod +x ./sum_columns.pl && ./sum_columns.pl input.txt
การใช้งานง่าย ตัวอย่างเช่น:
$ ./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