2016-01-29 7 views
0

Приложение постоянно записывает в журнал. Каждая строка формирует новую запись, журнал находится в формате csv. Пример:Использование BASH, как я могу опросить log.csv, запись в новый log.csv в линейных группах с использованием Tail

123123123,asdf,asdf,3453456,sdfgsfgs,4567asd,zxc,aa 
444444222,asdf,asdf,3453456,sdfgsfgs,4567asd,zxc,aa 
563434535,asdf,asdf,3453456,sdfgsfgs,4567asd,zxc,aa 
234234334,asdf,asdf,3453456,sdfgsfgs,4567asd,zxc,aa 
234234534,asdf,asdf,3453456,sdfgsfgs,4567asd,zxc,aa 
546456456,asdf,asdf,3453456,sdfgsfgs,4567asd,zxc,aa 
567567567,asdf,asdf,3453456,sdfgsfgs,4567asd,zxc,aa 
234232342,asdf,asdf,3453456,sdfgsfgs,4567asd,zxc,aa 

Мне нужно опрашивать журнал и извлекать данные в кусках Добавляя данные в другой файл журнала под названием newLog.csv

мне нужно убедиться, что; Я не копирую данные, уже перенесенные в новый файл, Если нет 200 строк данных, тогда он фиксирует ближайшее количество доступных строк, не получая дубликатов.

Могу ли я изменить эту инструкцию хвоста, чтобы соответствовать вышеизложенному?

tail -n 200 $REMOTE_HOME/data/log.csv >> $SCRIPT_DIR/$project/newLog.csv 

ответ

1

При условии, что первые данные в строке своего рода временного кода (? UnixTime), вы можете сделать:

1.check время последнего письменного линии в новом журнале.

LAST_LINE=tail -n 1 /PATH/new_log | awk -F',' '{print $1}' 

2.Check первая линия, которую Вы хотите написать

FIRST_LINE=tail -n 200 /PATH/old_log | head -n 1 

3.Если последней строке в новом журнале старше первой линии 200 записи 200 строк

if [ $LAST_LINE -lt $FIRST_LINE ] 
do tail -n 200 /PATH/old_log >> /PATH/new_log;done; 

Теперь вы должны положить его в цикл, чтобы заставить работу работать, например, 3 линии перекрываются. В основном вы делаете то же самое, что и раньше, просто перечислите последние 200 строк, чтобы получить первый новый.

LAST_LINE=tail -n 1 /PATH/new_log | awk -F',' '{print $1}' 

COUNT=200; 
while [ $COUNT -gt 0 ]; do 
FIRST_LINE=tail -n $COUNT /PATH/old_log | head -n 1 
if [ $LAST_LINE -lt $FIRST_LINE ] 
do tail -n $COUNT /PATH/old_log >> /PATH/new_log;break;done; 
done 

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

  • Нет связанных вопросов^_^