2012-01-31 101 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