Home > Software design >  LInux Script to remove lines that match dates
LInux Script to remove lines that match dates

Time:01-28

I have a log file that includes lines that are formatted like the following below. I am trying to create a script in linux that will remove the lines older then x days from the current date. Thank you for the help.

Wed Jan 26 10:44:35 2022 : Auth: (72448)   Login incorrect (mschap: MS-CHAP2-Response is incorrect): [martin.zeus] (from client CoreNetwork port 0 via TLS tunnel)    
Wed Jan 16 10:45:32 2022 : Auth: (72482) Login OK: [george.kye] (from client CoreNetwork port 5 cli CA-93-F0-6C-7E-77)

CodePudding user response:

I think you should take a look at logrotate and Kibana & Elastic search to parse and filter the logs.

Nevertheless, I made a simple script that prints only the entries from the day that you pass as an argument until the current date,

E.g. This will print only the logs since the last 5 days. bash filter.sh log.txt 5

#!/usr/bin/env bash

file="${1}"
days="${2:-1}"

epoch_days=$(date -d "now -${days} days"  %s)

OFS=$IFS
IFS=$'\n'
while read line; do
    epoch_log=$(date --date="$(echo $line | cut -d':' -f1,2,3)"  %s)
    if [ ${epoch_log} -ge ${epoch_days} ]; then
        echo ${line}
    fi
done < ${file}
IFS=$OFS
  •  Tags:  
  • Related