2016-03-03 2 views
1

У меня есть огромный logfile1 (Linux) с нижеприведенным форматом даты & Я хочу извлечь последние 24 часа данных & записать в другой файл с помощью скрипта оболочки. Помогите мне решить эту задачу?Shell Scripting (Извлечение журналов за последние 24 часа)

---------- 
03/03/2016 05:40:42 AM QWTRAB1 AMQ7315: Failed to put message to accounting queue. Reason(2053 
---------- 
03/03/2016 05:40:42 AM QWTRAB1 AMQ7315: Failed to put message to accounting queue. Reason(2053 
---------- 
03/03/2016 05:40:46 AM QWTRAB1 AMQ7315: Failed to put message to accounting queue. Reason(2053 
---------- 
03/03/2016 05:40:46 AM QWTRAB1 AMQ7315: Failed to put message to accounting queue. Reason(2053 

ответ

1

вы можете сделать что-то похожее на Split access.log file by dates using command line tools:

split.awk:

{ 
    split($1,array,"[:/]"); 
    year = array[3] 
    month = array[2] 
    day = array[1] 

    print > FILENAME"-"year"_"month"_"day".txt" 
} 

Команда:

awk -f split.awk your_log_file.log 
+0

./test.sh + AWK $ 'BEGIN {\ п раскол ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь", месяцы, "«) \ п для (а = 1; a <= 12; a ++) \ nm [months [a]] = a \ n} \ n {\ n split ($ 4, array, "[: /]"); \ n year = array [3] \ n month = sprintf ("% 02d", m [массив [2]]) \ n \ n print> /apphome/mqm/logs/NewFile"-"year"_"month".txt"\n} '/ apphome/mqm/logs/MQLOGS.OUT.0303160800.txt awk: cmd. line: 10: (FILENAME =/apphome/mqm/logs/MQLOGS.OUT.0303160800.txt FNR = 1) фатальный: деление на ноль предпринято – Krishna

+0

@ Кришна, я обновил свой ответ. Если у вас действительно есть строки «------» в вашем файле журнала, вы должны сначала отфильтровать их ... – MaxU

0

Попробуйте awk команда обеспечения диапазон дат

awk '$0 >= "03/03/2016 05:40" && $0 <= "03/02/2016 05:40"' 

UPDATE:

#!/bin/bash 
position=0 
length=10 
PREVDATE=`date -d "-1 days" +"%d-%m-%Y"` 
while IFS='' read -r line || [[ -n "$line" ]]; do 
     LOGDATE=${line:position:length} 
     if [ "$PREVDATE" = "$LOGDATE" ]; then 
       echo $line >> $PREVDATE.log 
     fi;  
done < "$1" 

Если вы хотите получить журнал для предыдущего дня. Вы можете запустить этот скрипт в crontab каждый раз. Сохраните данный скрипт в файле logparser.sh. Предоставьте основной файл журнала в качестве аргумента. Вы можете найти анализируемые данные в новом имени файла журнала с предыдущей датой.

попробовать $./logparser.sh logfilename.log

+0

Я хочу делать это ежедневно с помощью задания cron – Krishna

+0

@Krishna Я обновил ответ. Вы можете запустить этот скрипт как crontab !! – Rocoder

+0

Похоже, что это не дает вывод в формате записи – Krishna

Смежные вопросы