2015-02-11 49 views
0

我在Bash和unix中很新。我被分配了一個任務以從名爲errors.out的日誌中提取數據,該日誌使用分隔符|。這裏的數據的一個示例:從文件中讀取數據並使用bash或awk插入到數據庫中

1423544401 | video_load_time | 5.0.0.37 | I3 | 55.66.88.77 | 0.0 | RAT |麥克| 5656519 | 6549943438483 || |||專輯N/A || 7149

所以基本上在順序中的數據由分隔|在下面:

 times 
 eventKey 
 appl 
 devic 
 devn 
 sign 
 ne 
 State 
 latude 
 lde 
 su 
 buame 
 tount 
 assId 
 eCode 
 monitor 
 duration 

我需要計數每個eventkeys的(video_load_time),並添加其總持續時間。 然後我必須將這兩個字段插入到我創建的數據庫中。 我的數據庫有2個字段counttotalduration下表counter。 有沒有人有任何想法,我應該用它來完成這個?聽說awkpython將是一個不錯的選擇..

+1

您可以將其他任何其他值使用MySQL的'LOAD DATA INFILE'命令將CSV文件中的數據加載到表中。然後,您可以使用SQL查詢將數據合併到具有計數和持續時間的新表中。 – Barmar 2015-02-11 19:35:43

+1

ssh如何在這裏介入? – Kenster 2015-02-11 20:07:18

回答

1

使用awk:

awk -F \| '{ duration[$2] += $NF } END { for(d in duration) { print d, duration[d] } }' errors.out 

這裏$2是在每行和第二場$NF最後,因此通過鍵和打印此總結了持續時間在達到輸入結束時的結果 - 處理完所有內容後。

編輯:要添加計數器的是,

awk -F \| '{ duration[$2] += $NF; ++counter[$2] } END { for(d in duration) { print d, counter[d], duration[d] } }' errors.out 
+0

哇謝謝你!這工作真的很好 你知道我可以用什麼命令來計算video_load_time的數量嗎? 請記住,有時該字段並不總是被稱爲video_load_time,有時被稱爲崩潰,audio_load等 – 2015-02-11 21:37:13

+0

我編輯了這一點英寸第一次忽略它。 – Wintermute 2015-02-11 22:00:21

+0

非常感謝你! 它工作得很好 A +++ – 2015-02-12 15:31:51

0
awk -v FS="|" -v KEY="video_load_time" '$2==KEY{TOTAL+=$NF}END{print KEY,TOTAL}' my_file 

-v KEY="video_load_time" 

可以將可變密鑰字符串更改爲video_load_time

相關問題