2012-10-17 58 views
-2

認爲這是file.txt的添加一個選項perl腳本命令行

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標記的平均值。

如果有可能,整個過程是什麼?

+1

目前還不清楚你在這裏要求什麼......你問Perl是否可以讀取傳遞給腳本的參數,或者是否有解析選項的庫? – jheddings

+0

[我如何將命令行參數傳遞給Perl程序?](http://stackoverflow.com/questions/361752/how-can-i-pass-command-line-arguments-toa-a- perl-program) – jheddings

回答

2

嘗試http://perldoc.perl.org/Getopt/Long.html從文檔:

的的Getopt ::龍模塊實現()稱爲 GetOptions擴展getopt的功能。此功能符合POSIX語法,用於命令 行選項,帶有GNU擴展。一般來說,這意味着選項 具有長名稱而不是單個字母,並且與 雙短劃線「 - 」一起引入。支持捆綁命令行選項, 採用更傳統的單字母方式, ,但默認情況下未啓用。

有關Perl中訪問命令行選項的一般信息,請閱讀perlvar文檔:http://perldoc.perl.org/perlvar.html#$ARGV

-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." 
+1

給我使用Getopt :: Std更容易 – femchi