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

来源:互联网 发布:遭遇网络诈骗怎么报警 编辑:程序博客网 时间:2024/05/16 10:38

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

在项目开发过程中一般需要经常检查日志文件中的错误,在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_PATHfunction 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_LINEfi

说明:
1. 将文件保到系统路径之一的/root/bin中 确保脚本可以在任意目录下直接运行
2. 使用chmod命令赋予文件可执行权限
3. 最后/root/.bashrc 添加一行 例如 alias clg=”sh clg.sh” 给脚本设置一个别名 clg
4. 然后使用source .bahrc 命令使别名生效 这样可以直接用clg 代替 sh clg.sh 使脚本使用起来像一个用户自定义命令一样