簡體   English   中英

bash腳本出現SUM問題

[英]Having SUM issues with a bash script

我正在嘗試編寫腳本以從存儲4個工業冷凍櫃溫度讀數的4個文件中提取整數,這是一個愛好腳本,它會生成所需的常規讀數,但是當我嘗試生成溫度讀數的SUM時我將以下打印輸出到文件中,並且我的目標是僅打印末尾SUM,而不是打印垂直格式打印出的單個數字。非常感謝您的幫助;這是我的代碼

grep -o "[0.00-9.99]" "/location/$value-1.txt" | awk '{ SUM += $1; print $1} END { print SUM }' >> "/location/$value-1.txt"

這就是我得到的回報

    Morningtemp:17.28
Noontemp:17.01
Lowtemp:17.00 Hightemp:18.72
1
7
.
2
8
1
7
.
0
1
1
7
.
0
0
1
8
.
7
2
53

它確實生成了SUM,我不需要已經列出的數字,只需要SUM總數

grep -o "[0.00-9.99]" "/location/$value-1.txt"的正則表達式等效於[0-9.] ,但是您可能正在尋找0.00到9.99之間的數字。 為此,您需要一個不同的正則表達式:

grep -o "[0-9]\.[0-9][0-9]" "/location/$value-1.txt"

會尋找一個數字,一個點和另外兩個數字。 [.]代替\\.幾乎是誘人的\\. ; 它也會起作用。 一個平原. 不會; 會選擇諸如0X87之類的條目。

請注意,顯示的模式( [0-9]\\.[0-9][0-9] )將匹配192.16.24.231兩次( 2.164.23 )。 如果這不是您想要的,則必須更加精確。 OTOH,對於您擁有的實際數據可能絲毫沒有關系。 如果您希望它匹配192.1624.231 (或.24.231 ),則必須優化正則表達式。

您的命令結構:

grep … filename | awk '…' >> filename

生活危險。 在示例中,它是'OK'(但是當我鍵入'OK'時,我的臉上有一個巨大的鬼臉),因為awk腳本在grep讀取全部內容之前不會向文件寫入任何內容。 但是將>>更改為> ,您輸入的內容為空,或者在grep完成之前用awk編寫了資料,然后突然很難確定發生了什么(這部分取決於awk在結束時寫的內容)文件)。

為什么不完全堅持AWK? 碼:

$ cat > summer.awk 
{
    while(match($0,/[0-9]+\.[0-9]+/))    # while matches on record
    {
        sum+=substr($0, RSTART, RLENGTH) # extract matches and sum them
        $0=substr($0, RSTART + RLENGTH)  # reset to start after previous match
        count++                          # count matches
    }
} 
END {
    print sum"/"count"="sum/count        # print stuff

數據:

$ cat > data.txt
    Morningtemp:17.28
Noontemp:17.01
Lowtemp:17.00 Hightemp:18.72

跑:

$ awk -f summer.awk file
70.01/4=17.5025

它也可能在冬天工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM