Open vieyahn2017 opened 7 months ago
一个取日志的脚本
日志格式
Sat Jan 27 05:42:24 PM CST 2024 (date命令执行结果)
===================$FUNCNAME================
PARAM=xxx
1
2
3
4
5
6 inode 123456
7
8
9
a
b
run [ xxx ] to test.
function get_last_inode_log()
{
if [ -z $1 ]; then
if [ $(cat $LOG_FILE | tail -n 20 |grep -c "M CST") -eq 0 ]; then
cat $LOG_FILE | tail -n 20
else
cat $LOG_FILE | tail -n 20 | sed '1,/M CST/d'
fi
return
fi
local inode=$1
local first_no=$(cat $LOG_FILE | grep -n $inode | awk -F":" 'NR==1{print $1}')
local first_no_before_10=$((first_no-10))
sed -n ${first_no_before_10},${first_no}'p' $LOG_FILE | sed '1,/M CST/d'
local last_no=$(cat $LOG_FILE | grep -n $inode | awk -F":" 'END{print $1}')
local last_no_after_20=$((last_no+20))
sed -n $(($first_no+1)),$((last_no-1))'p' $LOG_FILE
sed -n ${last_no},${last_no_after_20}'p' $LOG_FILE | sed '1,/run \[/!d'
}
代码写的很丑
cat $LOG_FILE | grep -n $inode | awk -F":" '{print $1}'
410
411
412
413
414
415
416
417
418
first_no=410 往前找10行,然后删掉匹配到的date行之前的,sed '1,/PM CST/d' 这之间用sed的p输出411-417行 last_no=418往后找20行,删掉run [ xxx ] 之后的,先用sed '1,/run [/d',然后加了个取反的!
不知道有没有更好的实现
sed的p是打印,d是删除,取反!