如图中为日志的一段内容,现在需要统计这个接口的执行时间以及对应的参数。也就是需要拿到
/api/dialog
这 一行开始直到 [ info ] 执行时间: 1.03604388237
这一行结束的之间的所有内容,我用 grep
很难拿到这些内容,只能取某一行的内容,跨行就不行了。
请问如何解决?
如图中为日志的一段内容,现在需要统计这个接口的执行时间以及对应的参数。也就是需要拿到
/api/dialog
这 一行开始直到 [ info ] 执行时间: 1.03604388237
这一行结束的之间的所有内容,我用 grep
很难拿到这些内容,只能取某一行的内容,跨行就不行了。
请问如何解决?
如果有更多的信息,可以用正则。
提供一个傻瓜化的提取方案供参考:
#!/bin/bash
log=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 "执行时间" |awk '{print $NF}')
runParmas=$(echo "$content" |grep -v "执行时间" |grep -v "/api/dialog")
echo "API info /api/dialog runTime: ${runTime} runParmas:${runParmas}"
fi
done
done
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答820 阅读✓ 已解决
2 回答3.3k 阅读
可改用
sed
命令, 如对应 a.txt 文件内容
输出