LINUX.ORG.RU

Как отсортировать данные

 , ,


0

1

Приветствую Всех!!! Подскажите пожалуйста есть два файла лога которые нужно отсортировать. Например нужно старые записи дат в логе вывести в другой файл и сжать в .gz и их же почистить оставить только с новыми датами.

Не очень понял вопрос. Что нужно делать со старыми записями? Во второй файл их переместить? А так скрипт нужно писать. Я бы это на Pearl делал, но вообще, любой язык (в том числе и bash+awk) подойдет. Записи со старыми датами искать регулярными выражениями.

Serge10 ★★★★★ ()
Ответ на: комментарий от Serge10

Есть лог в которым записи ведутся по месяцам и который вес его несколько гигов… Возможно командами перенаправить или скриптом старые даты из лога в текстовый файл и сжать его в .gz и их же удалить в этом логе, чтобы уменьшить объём этого лога? Если есть возможность добавить пример команд с помощью которых можно это сделать.

art1390 ()
Ответ на: комментарий от art1390

Возможно, не самый простой способ, но можно так:

head -n NNNNNNN full.log | gzip > part1.gz

где NNNNNNN - это число первых строк в логе, которое относится к нужным месяцам и которое найти экспериментальным путём.
Затем

tail -n KKKKK full.log > new.log
mv new.log full.log

где KKKKK - это уже наоборот, количество последних строк в файле, тоже найти экспериментальным путём.

PeleWin ()
Ответ на: комментарий от justAmoment

К сожалению не могу привести пример.

Есть определенный настроенный лог:

/etc/logrotate.d/xxx.log {

copytruncate

weekly

rotate 13

compress

delaycompress notifempty

missingok

create 644 root root

}

После этого logrotate не выполняется пишет мало места, но и места нету возможности добавить на вм. Файл логов получился объемный, и нужно удалить старые даты с лога предварительно сохранив через grep в отдельный файл и сжать его в .gz Старые даты я слил в отдельный файл через grep -v ‘даты’ /home/xx/xxx/xxxx.log | gzip > home/xx/xxx/xxxx.log.gz А теперь Нужно их сличить чтобы удостовериться что все старые даты слились и не потерялись. Это сделать через diff если файл весовый? И как почистить старые даты в исходном логе через sed ?

Заранее Спасибо за ответ!

art1390 ()
Ответ на: комментарий от art1390

Так и надо было написать сразу, что ты из горящего танка пишешь. Тебе сначала надо выбраться из горящего танка, а потом уже разбираться, что дальше с логами делать. Целиком перетащи эти логи себе на комп по ssh например. На виртуалке целиком эти логи удали. Потом уже на своём компе разложишь их по датам.

2 строчки для примера нужны, чтобы увидеть как их можно разложить на твоём компе ориентируясь на формат метки времени (timestamp) в каждой строке.

Например через awk можно сделать так

Пусть, у тебя такой лог.

$ cat log1.txt
2020-04-30 что-то тут написано в логе
2020-05-09 что-то тут написано в логе
2020-05-10 что-то тут написано в логе
Тогда выполнив команду
$ mkdir -p "new"; awk '{a = "new/" substr($1,1,7) ".log"; print $0 >> a;}' log1.txt
ты получишь раскладку по месяцам.
$ tree
.
├── log1.txt
└── new
    ├── 2020-04.log
    └── 2020-05.log

1 directory, 3 files
Так прогоняешь все свои исходные файлы логов (и которые не пойми как грепал и которые сохранял просто так). Потом к получившимся месяцам применяешь «uniq» и «sort»

justAmoment ★★★★★ ()

Исходя из того, что это лог и что даты в нём итак упорядочены, то есть файлы не надо сортировать, можно убить двух зайцев одним выстрелом:

sed -in $'/ШАБЛОН/{:l n;b l}; w/dev/stdout\n d' log.txt | gzip > gzipped_part.gz

Где ШАБЛОН — регулярочка для строки из файла log.txt, которая будет границей его раздела: данные до этой строки переместятся в gzipped_part.gz, а начиная со строки-границы, включая её, останутся в исходном файле. Например, для лога, который привёл justAmoment можно написать такой шаблон: ^2020-05-09.

Что касается проверки целостности данных, то с моим вариантом это можно сделать так:

# считаем хеш первой части до разделения
sed -n '/ШАБЛОН/q; p' log.txt | md5sum -
# считаем хеш второй части до разделения
sed -n '/ШАБЛОН/{:l p;n;b l}' log.txt | md5sum -

# делим файл
...

# считаем хеши обоих частей после разделения
zcat gzipped_part.gz | md5sum - log.txt

Я проверял все команды, всё работает.

Вот. Как видишь, мы тут для тебя стараемся подбирать самые классные решения, расписываем всё в деталях. Пожалуйста, в следующий раз и ты постарайся оформить тему так, чтобы даже самому торопливому было понятно.

anonymous ()
Ответ на: комментарий от art1390

Есть лог в которым записи ведутся по месяцам

Т. е. никакой сортировки не требуется - записи в файле уже упорядочены по датам. В общем, решений Вам уже кучу накидали, можно по вкусу выбирать.

Serge10 ★★★★★ ()