如圖中為日志的一段內(nèi)容,現(xiàn)在需要統(tǒng)計(jì)這個(gè)接口的執(zhí)行時(shí)間以及對應(yīng)的參數(shù)。也就是需要拿到 /api/dialog 這 一行開始直到 [ info ] 執(zhí)行時(shí)間: 1.03604388237 這一行結(jié)束的之間的所有內(nèi)容,我用 grep 很難拿到這些內(nèi)容,只能取某一行的內(nèi)容,跨行就不行了。請問如何解決?
2 回答

胡子哥哥
TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
可改用 sed
命令, 如
sed -e '/\/api\/dialog/,/執(zhí)行時(shí)間/!d' a.txt
對應(yīng) a.txt 文件內(nèi)容
[ 0 ] GET /api/hi [ info ] 執(zhí)行時(shí)間: 0[ 1 ] GET /api/dialog [ info ] 執(zhí)行時(shí)間: 1[ 2 ] POST /api/dialog [ info_api ] array ( 'a' => 2) [ info ] 執(zhí)行時(shí)間: 2[ 3 ] POST /api/dialog [ info_api ] array ( 'a' => 3) [ info ] 執(zhí)行時(shí)間: 3
輸出
[ 1 ] GET /api/dialog [ info ] 執(zhí)行時(shí)間: 1[ 2 ] POST /api/dialog [ info_api ] array ( 'a' => 2) [ info ] 執(zhí)行時(shí)間: 2[ 3 ] POST /api/dialog [ info_api ] array ( 'a' => 3) [ info ] 執(zhí)行時(shí)間: 3

料青山看我應(yīng)如是
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果有更多的信息,可以用正則。
提供一個(gè)傻瓜化的提取方案供參考:
#!/bin/bashlog=1.txt getstart=$(cat $log |grep -n "/api/dialog" |awk -F':' '{print $1}' |xargs) getlink=$(cat $log |grep -n "^\[" |awk -F':' '{print $1}' |xargs) startArray=(${getstart}) linkArray=(${getlink})for (( i = 0; i < ${#linkArray[*]}; i++ )); do for (( j = 0; j < ${#startArray[*]}; j++ )); do if [[ ${startArray[$j]} -eq ${linkArray[$i]} ]]; then next=$(expr $i + 2) echo "start line:${startArray[$j]} end line:${linkArray[$next]}" content=$(cat $log |sed -n "${startArray[$j]},${linkArray[$next]}p" ) runTime=$(echo "$content" |grep "執(zhí)行時(shí)間" |awk '{print $NF}') runParmas=$(echo "$content" |grep -v "執(zhí)行時(shí)間" |grep -v "/api/dialog") echo "API info /api/dialog runTime: ${runTime} runParmas:${runParmas}" fi done done
添加回答
舉報(bào)
0/150
提交
取消