假设这是file.txt
Name:Lab1:Lab2:Lab3:Lab4:Lab5:Lab6:Exam1:Exam2:Final
Annette Adams :8:24:19:24:10:12:43:35:98
Mary Beard:9:30:19:23:10:14:29:39:87
Antoinette Brown:9:16:18:22:9:12:19:31:79
.
.
.
是否可以在Perl
中编写一个脚本,其中包含一些用户可以传递给命令行并获得结果的选项。
例如getAverage.pl -l 3 file.txt
打印Lab3标记的平均值。
如果有可能整个过程是什么?
答案 0 :(得分:2)
尝试http://perldoc.perl.org/Getopt/Long.html来自文档:
Getopt :: Long模块实现了一个名为的扩展getopt函数 GetOptions()。此函数遵循命令的POSIX语法 行选项,GNU扩展。一般来说,这意味着选项 有长名称而不是单个字母,并带有一个 双击" - "。支持捆绑命令行选项,如同 提供了更传统的单字母方法的情况 但默认情况下未启用。
有关在Perl中访问命令行选项的一般信息,请阅读perlvar
文档:http://perldoc.perl.org/perlvar.html#$ARGV
答案 1 :(得分:-1)
我在python中整理了一个快速而肮脏的解决方案。应该很容易将它移植到perl。
import sys
lines = open("file.txt",'r').readlines()
if len(sys.argv) > 2 and sys.argv[1] == "-l":
try:
number = int(sys.argv[2])
except:
print "Input a number after the -l switch."
average = 0
for i in lines:
try:
average += int(i.split(":")[number])
except:
pass
average /= 3
print "The average score for %s is %d" \
%(lines[0].split(":")[number], average)
else:
print "Computer says no."