Как найти последнюю действительную информацию, возможно, распределенную по нескольким файлам журнала

У меня есть парк автобусов, который каждое утро отправляет мне файл журнала мониторинга состояния транспортного средства в предыдущий день. Журнал обновляет различную информацию каждые 5 минут. Среди собранных данных есть координаты GPS.

Долгота и широта представлены на отдельных линиях. Журналы для каждого автомобиля хранятся в отдельной папке. В этой папке находится подпапка, содержащая все файлы журнала. Каждый файл журнала начинается с «мониторинга», а затем следует дата и время создания. Так что у меня есть файл журнала на каждый день в этой папке.

Пример файла:

07-15 15:48:28.064 [INFO ] dataset.up.throughput : 0
07-15 15:53:16.425 [INFO ] system.disk.used.total : 731 MB
07-15 15:53:16.426 [INFO ] system.mem.used.total : 458 MB
07-15 15:53:16.427 [INFO ] system.cpu.usage : 9,99
07-15 15:53:16.520 [INFO ] msg.nbr.expired : 0
07-15 15:53:16.521 [INFO ] msg.nbr.received : 0
07-15 15:53:16.522 [INFO ] msg.send.throughput : 0
07-15 15:53:16.523 [INFO ] msg.received.throughput : 0
07-15 15:53:16.590 [INFO ] dataset.nbr.jobs.queue : 6
07-15 15:53:16.590 [INFO ] dataset.nbr.jobs.inprogress : 6
07-15 15:53:16.590 [INFO ] dataset.nbr.jobs.expired : 0
07-15 15:53:16.590 [INFO ] dataset.down.throughput : 0
07-15 15:53:16.590 [INFO ] dataset.up.throughput : 0
07-15 15:53:16.591 [INFO ] posn.altitude : 80.0 m
07-15 15:53:16.591 [INFO ] posn.longitude : 4° 18' 34"
07-15 15:53:16.591 [INFO ] posn.latitude : 50° 53' 35"
07-15 15:53:16.591 [INFO ] posn.speed : 23.55 m/s
07-15 15:53:16.591 [INFO ] posn.track : 235° 1' 30"
07-15 15:53:16.591 [INFO ] posn.source : GPS_DR
07-15 15:53:16.591 [INFO ] posn.timestamp : Wed Jul 15 13:53:15 CEST 2015
07-15 15:53:16.592 [INFO ] mpm.online : false
07-15 15:53:16.592 [INFO ] mpm.online.ts : 0
07-15 15:58:16.383 [INFO ] system.disk.used.total : 732 MB

Обычно я использую команду оболочки следующим образом:

find /path/to /vehicle/folder/vehicleID/ -type d -name 'FolerContainingLogFiles' -exec sh -c "ls {}/monitoring* -t | head -1 | grep "posn.l" {}/monitoring* | tail -2" >> /path/results.log ";" ;

Это нормально работает в обычных ситуациях, но иногда шина перемещается только на очень короткое время на стоянке. В этом случае GPS не может синхронизироваться со спутниками, и поэтому регистрация дает мне value = "0" для долготы и широты.

И именно здесь начинается проблема:

  1. , если последние координаты равны = "0", тогда мне нужно пройти по файлу и попытаться найти последний ненулевой значение.
  2. иногда файл имеет только нулевые значения. В этом случае мне нужно перейти к предыдущему файлу и начать поиск ненулевого значения и т. Д.

Я пытался написать bash-скрипт, но по какой-то причине не могу получить правильный вывод.

find $zoekPad -type d -name 'mobiguider-logs-archive' | while read line; do

cmdOutputLon=$(ls $line/monitoring* -t | head -1 | grep "posn.lo" $line/monitoring* | tail -1 )
lonDD=$(echo $cmdOutputLon | awk -F':' '{print $5}' | awk '{printf ("%.8f\n",$1+$2/60+$3/3600)}')
cmdOutputLon=$cmdOutputLon";"$lonDD
cmdOutputLat=$(ls $line/monitoring* -t | grep "posn.la" $line/monitoring* | tail -1)
latDD=$(echo $cmdOutputLat | awk -F':' '{print $5}' | awk '{printf ("%.8f\n",$1+$2/60+$3/3600)}')
cmdOutputLat=$cmdOutputLat";"$latDD
huidigeIndexStart=1
while [[ true ]]
do
    loopCount=1000
    cmdOutputLon=$(ls $line/monitoring* -t | grep "posn.lo" $line/monitoring* | sed -n $huidigeIndexStart,$huidigeIndexStart"p")
    echo $huidigeIndexStart
    lonDD=$(echo $cmdOutputLon | awk -F':' '{print $5}' | awk '{printf ("%.8f\n",$1+$2/60+$3/3600)}')
    cmdOutputLon=$cmdOutputLon";"$lonDD
    cmdOutputLat=$(ls $line/monitoring* -t | grep "posn.la" $line/monitoring* | sed -n $huidigeIndexStart,$huidigeIndexStart"p")
    latDD=$(echo $cmdOutputLat | awk -F':' '{print $5}' | awk '{printf ("%.8f\n",$1+$2/60+$3/3600)}')
    cmdOutputLat=$cmdOutputLat";"$latDD

    if ! [[ $cmdOutputLon =~ '0° 0'\'' 0"' ]]
    then
        echo $cmdOutputLon >> $schrijfPad
        echo $cmdOutputLat >> $schrijfPad
        continue 2
    fi

    if [ $huidigeIndexStart -gt $loopCount ] && [ $loopCount -gt 0 ]
    then
        echo $cmdOutputLon >> $schrijfPad
        echo $cmdOutputLat >> $schrijfPad
        continue 2
    fi

    huidigeIndexStart=$(($huidigeIndexStart + 1))
done

echo $cmdOutputLon >> $schrijfPad
echo $cmdOutputLat >> $schrijfPad
done


now=$(date +"%m_%d_%Y_%H:%M:%S");
echo $now
echo "Einde LastGPS_allvehicules.sh "$now >> /home/mxtbp/raid5/logs/rsync/Rsync_log.txt ;

Кто-нибудь может помочь?

2
задан 12 August 2017 в 09:32

0 ответов

Другие вопросы по тегам:

Похожие вопросы: