由於asterisk的CDR是csv格式,想要分析特定欄位,如帳單秒數,我們可以使用底下的指令
cat Master.csv|cut -d, -f14
上面那行指令的意思是列出第14個欄位
若想要指定日期範圍的話,可增加一些指令
egrep “2015-08” Master.csv|cut -d, -f14
上面是指定2015年08月份的資料,只顯示第14個欄位
原本以為這樣就可以了,可是後來發現不夠,因為凡事總有例外,底下的內容就是例外:
檢視程式碼 TEXT
"this, is the first entry", this is the second, 34.5 "Dial","SIP/a2/886980xxxxxx,60,XxWw","2015-09-03 14:04:23" |
有沒有看到上面那兩行的例子,都是在兩個 ” 引號的中間有逗號,這就使我們單純的使用 cut 這個工具按 , 逗號來算第幾個欄位會出錯,因為算出來的欄位數是不一樣的,所以我們就需要專門處理csv的工具,它能把兩個引號中間的逗號給忽略掉。
所以我們要先安裝csvtool這個套件
aptitude install csvtool
用法簡介:
csvtool col 14 Master.csv
上的意思是指定顯示第14個欄位,若你想要使用管線搭配其它程式使用的話,那麼檔名你就要改成 – (減號),這樣它就支援stdin(標準輸入)
底下是搭配csvtool套件所寫的script
檢視程式碼 BASH
#!/bin/bash #1確定檔名 logname=/var/log/asterisk/cdr-csv/$1.csv #2指定日期範圍 dateRange=$2 #3指定欄位 column=$3 #使用說明:本程式後面要帶3個參數,分別用空格隔開 #語法: cdrchk.sh log檔名 指定日期範圍 指定欄位數字 #範例: cdrchk.sh A0000000013 2015-08 14 #日期範圍說明:一定要填,可指定年月日,語法: 年-月-日 ,若只想指定年月,語法:年-月 #若不想指定範圍則需填入 .* if [ "${1}" == "" -o "${1}" == "help" -o "${1}" == "h" ] ;then echo 使用說明:本程式後面要帶3個參數,分別用空格隔開 echo "語法: cdrchk.sh log檔名 指定日期範圍 指定欄位數字" echo "範例: cdrchk.sh A0000000013 2015-08 14" echo "日期範圍說明:一定要填,可指定年月日,語法1:年-月-日 語法2:年-月" echo "若不想指定日期範圍則需填入 .*" exit fi #egrep "$dateRange" $logname | cut -d, -f$column egrep "$dateRange" $logname | csvtool col $column - |
簡介:此程式後面要帶3個參數,若不帶任何參數的話,則會顯示使用說明,若帶 help 參數也會顯示使用說明。