2016-08-19 119 views
0

我試圖寫一個腳本來拉出4個文件中存儲的溫度讀數從4個工業冰櫃的整數,這是一個業餘愛好劇本它產生我想要的一般讀數,但是當我嘗試生成溫度讀數的SUM,我將下列打印輸出到文件中,我的目標是打印結束SUM而不是打印出垂直格式的單個數字 任何幫助將不勝感激;以下是我的代碼SUM問題與bash腳本

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我不需要已經上市的數字,只是總和

+2

cmon,只要刪除'print $ 1',對吧?祝你好運! – shellter

+0

現在誰能告訴我怎麼樣 5.90 5.90 5.53 6.00 SUM最多47 – user177073

+0

我得到23.33。你是否說過你從這些數字中得到了47個答案?或者你真的想讓47成爲你的答案,無論你的投入是什麼? ;-) 祝你好運。 – shellter

回答

2

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寫入文件末尾的內容)。

2

爲什麼不完全貼上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 

它可能在冬季工作了。

+0

謝謝,非常感謝幫助 – user177073