[英]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.16
和4.23
)。 如果這不是您想要的,則必須更加精確。 OTOH,對於您擁有的實際數據可能絲毫沒有關系。 如果您希望它匹配192.16
和24.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.