首頁>Program>source

我正在尝試使用 awk查詢資料第二列的平均值 一堂Class.這是我当前的代碼,並提供了我的讲师提供的框架:

#!/bin/awk
### This script currently prints the total number of rows processed.
### You must edit this script to print the average of the 2nd column
### instead of the number of rows.
# This block of code is executed for each line in the file
{
x=sum
read name
        awk 'BEGIN{sum+=$2}'
        # The script should NOT print out a value for each line
}
# The END block is processed after the last line is read
END {
        # NR is a variable equal to the number of rows in the file
        print "Average: " sum/ NR
        # Change this to print the Average instead of just the number of rows
}

我收到一條錯誤訊息:

awk: avg.awk:11:        awk 'BEGIN{sum+=$2}' $name
awk: avg.awk:11:            ^ invalid char ''' in expression

我认為我已经接近了,但是我真的不知道从這裏去哪裏.该代碼不應太複雜,因為我们在Class堂上看到的一切都是相当基本的.請让我知道。

最新回復
  • 5月前
    1 #

    您的特定錯誤与第11行有關:

    awk 'BEGIN{sum+=$2}'
    

    這是 awk所在的行 被呼叫,其 BEGIN 指定了block-但您已经在awk指令碼中,因此無需指定 awk .您也想執行 sum+=$2 在每行輸入中,因此您不希望在 BEGIN中使用它 塊.因此,该行應簡單地讀為:

    sum+=$2
    

    您也不需要以下行:

    x=sum
    read name
    

    第一个只是建立 sum的同義詞 名為 x 我不確定秒是做什麼的,但是都不需要。

    這將使您的awk指令碼:

    #!/bin/awk
    ### This script currently prints the total number of rows processed.
    ### You must edit this script to print the average of the 2nd column
    ### instead of the number of rows.
    # This block of code is executed for each line in the file
    {
        sum+=$2
        # The script should NOT print out a value for each line
    }
    # The END block is processed after the last line is read
    END {
        # NR is a variable equal to the number of rows in the file
        print "Average: " sum/ NR
        # Change this to print the Average instead of just the number of rows
    }
    

    乔纳森·莱弗勒(Jonathan Leffler)的答案為awk提供了一个代表相同固定代碼的衬線,另外還要檢查至少有1行輸入(這將停止任何除以零的錯誤).如果

  • 5月前
    2 #

    awk '{ sum += $2; n++ } END { if (n > 0) print sum / n; }'
    

    $2中添加數字 (第二列)在 sum (變數由 awk自動初始化為零 )並增加行數(也可以通過內建變數NR處理).最後,如果至少讀取一个值,則print平均值。

    awk '{ sum += $2 } END { if (NR > 0) print sum / NR }'
    

    如果要使用shebang表示法,可以寫:

    #!/bin/awk
    { sum += $2 }
    END { if (NR > 0) print sum / NR }
    

    您也可以使用 printf()控製平均值的格式 和合適的格式( "%13.6e\n" 例如)。

    您還可以將代碼通用化以平均第N列(使用 N=2 在此示例中)使用:

    awk -v N=2 '{ sum += $N } END { if (NR > 0) print sum / NR }'
    

  • 5月前
    3 #

    尝試一下:

    ls -l  | awk -F : '{sum+=$5} END {print "AVG=",sum/NR}'
    

    NR是AwK內建變數,用於計算編號.記錄

  • 5月前
    4 #

    awk 's+=$2{print s/NR}' table | tail -1
    

    我正在使用 tail -1 print最後一行應该有平均值的數字...

  • c#:比较两个列表的差異
  • java:Tomcat Guice / JDBC記憶體洩漏