您的位置:首页 > 运维架构 > Shell

[shell] -- linux下日志文件的指定起始行和指定行数读取

2017-08-25 14:41 477 查看
摘要: 在项目开发过程中一般需要经常检查日志文件,为了方便读取一段日志而编写的脚本

在项目开发过程中一般需要经常检查日志文件中的错误,在grep -n 锁定到某一行的错误时我们通常要查看该行日志的上下文来分析错误。

而这个时候一般使用cat xx.log |head -n 1000|tail -n100 这样的命令来查看日志文件901 到 1000行的内容

但是这条命令太长 频繁的输入和计算行数非常的繁琐,所以写了一个脚本来代替

使用 范例

#注意:读取的目标文件必须在当前工作目录下

#读取xx.log 2000 到 2299行的内容
sh clg.sh xx.log 2000 300

#两个参数时 默认从2000 开始读取200行
sh clg.sh xx.log 2000


脚本内容如下

#!/bin/bash
#FILE_PATH 为当前日志的当前文件目录
FILE_PATH=$PWD"/"$1
#echo $FILE_PATH
function init_get_read_line(){
if [ -f $FILE_PATH ];then
#获得当前文件的总行数
TOTAL_LINE=$(cat -n $FILE_PATH | wc -l)
if [ $# -eq 2 ];then
READ_LINE=200
return 0
elif [ $# -eq 3 ];then
let "START_LINE=$2+$3"
READ_LINE=$3
return 0
else
echo "clg: $@ : ERRO PARAM "
return 1
fi
else
echo "clg: $FILE_PATH : No such file or dictory "
return 2
fi
}
#调用函数计算文件的开始行和读取行
init_get_read_line $@
if [ $? -gt 0 ];then
exit 1 #如果函数返回的错误代码则退出当前脚本
else
let "START_LINE=$2+$READ_LINE"
#echo $START_LINE
if [ $TOTAL_LINE -lt $START_LINE ];then
START_LINE=$TOTAL_LINE#如果总行数小于起始行 则起始行为总行数 保证能读到文件的末尾行
let "READ_LINE=$START_LINE-$2+1"
else
let "START_LINE=START_LINE-1"

fi
#最后显示日志内容
cat -n $FILE_PATH | head -n $START_LINE | tail -n $READ_LINE
fi


说明:

1. 将文件保到系统路径之一的/root/bin中 确保脚本可以在任意目录下直接运行

2. 使用chmod命令赋予文件可执行权限

3. 最后/root/.bashrc 添加一行 例如 alias clg=”sh clg.sh” 给脚本设置一个别名 clg

4. 然后使用source .bahrc 命令使别名生效 这样可以直接用clg 代替 sh clg.sh 使脚本使用起来像一个用户自定义命令一样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 编辑器 脚本