2012-01-31 103 views
0

這些是調用次數,因此比任何調用需要2秒或小於0.5秒的時間(大多數情況下介於0.800或1.900之間)都是預期的。嘗試查找時遇到問題一個腳本來刪除一些行,這裏有一個例子:刪除文本文件中的行

06:28:30.259 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:28:54.191 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:28:55.596 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:29:19.251 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:29:20.042 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:29:20.566 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:29:42.900 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:29:44.268 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:30:08.146 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:30:09.530 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:30:31.925 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:30:33.228 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:30:56.178 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 

的目標是獲得這樣的結果:

06:28:54.191 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:28:55.596 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:29:19.251 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:29:20.566 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:29:42.900 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:29:44.268 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:30:08.146 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:30:09.530 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 
06:30:31.925 qchatmgr_pal.c 197  E  +++PTT Press Call Manager/Error 
06:30:33.228 *InCallForm.c 934  E  FloorStatus: Granted Legacy/Error 

評論:

的第一個消息應該是「+++ PTT新聞「總是和遲到st應該是「FloorStatus:Granted」 第5行應該被刪除,因爲它沒有意義,呼叫設置應該(真的)在0.800 ms到1.9秒之間,所以小於0.5xx ms不太現實,所以行應該是除去。

有人可以給我一些提示,請繼續前進,我不指望有人解決這個問題,因爲它有點棘手。我一直在使用我在這個網站上發現的其他一些腳本(bash),但他們不適合這個。

預先感謝您。

+0

謝謝,我有點新手呢。 – 2012-01-31 10:36:08

+0

「沒有意義」背後的確切邏輯是什麼?你想刪除哪些行?爲什麼? – 2012-01-31 10:49:43

+0

任何一對線路「+++ PTT Press xxxx」和「FloorStatus:Granted」被分配給一個呼叫,例如在最後一對線路中: 06:30:31.925 qchatmgr_pal.c 197 E +++ PTT Press呼叫管理器/錯誤 06:30:33.228 * InCallForm.c 934 E FloorStatus:授予遺留/錯誤 呼叫設置的時間爲1.303 – 2012-01-31 11:02:28

回答

1

這是一個有點醜陋的(也許你想用awk或Perl):

#!/bin/bash 
FILE=calls.txt 

## remove first line if it contains "Granted"/last line "+++PTT" 
head -n 1 ${FILE} | grep -q Granted && sed -i '1d' ${FILE} 
tail -n 1 ${FILE} | grep -q +++PTT && sed -i '$d' ${FILE} 

## remove duplicated Granted entries 
tac ${FILE} > ${FILE}.tac 
sed -i '$!N; /^.*\(FloorStatus\).*\n.*\1.*$/!P; D' ${FILE}.tac 
tac ${FILE}.tac > ${FILE} 

LASTTIME=0 

while read line ; do 
    ## is line empty? 
    if [ ! -z "${line}" ] ; then 

    ## fetch times 
    T=$(echo ${line} | cut -d " " -f 1) 
    echo ${line} | grep -q +++PTT 
    P=$? 
    echo ${line} | grep -q Granted 
    G=$? 

    ## create timestamp 
    #TSTAMP=$(date -d "${T}" +'%s%N') 
    H=$(expr $(echo ${T} | cut -d : -f 1) \* 3600) 
    M=$(expr $(echo ${T} | cut -d : -f 2) \* 60) 
    S=$(echo ${T} | cut -d : -f 3 | sed 's#\.##g') 
    TSTAMP=$(expr ${H} \+ ${M}) 
    TSTAMP=$(expr ${TSTAMP} \+ ${S}) 

    ## calculate diff 
    D=$(expr ${TSTAMP} \- ${LASTTIME}) 

    ## less than threshold? 
    #if [ ${D} -lt 800000000 ] ; then 
    if [ ${D} -lt 800 -a ${P} -ne 0 ] ; then 
     ## remove current call 
     sed -i '/^'${T}'/d' ${FILE} 
    fi 
    LASTTIME=${TSTAMP} 
    fi 
done < ${FILE} 

## remove duplicated +++PTT entries 
tac ${FILE} > ${FILE}.tac 
sed -i '$!N; /^.*\(+++PTT\).*\n.*\1.*$/!P; D' ${FILE}.tac 
tac ${FILE}.tac > ${FILE} 
+0

./example.sh:第16行:[: - :預期的整數表達式 日期:無效日期'06:30:33.228' ./example.sh:行16:[: - :整數表達式預計 日期:無效日期'06:30:56.178' 我得到這個錯誤,但不知道爲什麼,因爲操作符以及聲明.. – 2012-02-01 11:57:27

+0

順便說一句,無論我可能用什麼,我都會永遠感謝任何人的幫助。 – 2012-02-01 12:00:04

+0

'date -d「06:30:33.288」+'%s%N''是否正常工作? – sgibb 2012-02-01 12:06:58

0

,你可以使用這樣的代碼:

while read FirstField SecondField ThirdField ForthFiled FifthField SeventhField 
    do 
    #you have your Values of a line in this seven variables 

    done < yourfilename 

這個文件將讀取您的所有文件並在FirstField和第二個字段中保存時間值,如SecondField中的* InCallForm.c等。 因此您可以在此while循環中對您的文件執行所有操作。 如果你不明白,我可以告訴更多...

+0

我明白了,但我應該處理差不多800或10000行:S – 2012-02-01 12:50:53

+0

好吧,但是很多行有什麼問題?這是一個循環,並會逐行讀取您的文件。 – 2012-02-02 04:40:09