date start duration description
2/5 10:00p 1:45 Did this and that.
2/6 2:00a 0:20 Woke up from my slumber.
==============================================
2:05 TOTAL time spent
有日誌中的許多條目手動創建日誌文件。要避免手動每次添加一個條目時重新計算總時間,我寫了下面的腳本:
#!/bin/bash
file=`ls | grep log`
head -n -1 $file | egrep -o [0-9]:[0-9]{2}[^ap] \
| awk '{ FS = ":" ; SUM += 60*$1 ; SUM += $2 } END { print SUM }'
首先,腳本假設恰好有一個文件在其名稱log
,而這之後,我的文件。其次,除了當前行總數之外的所有行,greps來自行的時間信息,並將其饋送給awk,將awk轉換爲分鐘。
這是我遇到問題的地方。最後的總和總是稍微偏離。通過試驗和錯誤,我發現awk
永遠不會記錄第一個記錄的第二個字段,例如在這種情況下45分鐘。它會計數小時;它不會計算分鐘數。它與其他記錄沒有這種問題,但始終是第一條記錄中的分鐘數。
什麼可能導致此行爲?我如何調試它?
+1,但我認爲 「正確」 的方式做到這一點是'awk的 '{SUM + = ...} END {...}' FS =:'而不是使用BEGIN塊 –
感謝您的評論,我不知道這一點。 我採取了最接近原始代碼的解決方案。如果我要做這樣的事情,我會使用'-F'選項。 – Josay
這解決了這個問題;謝謝。 –