Рассчитайте новые строки в файле длятся 1 минуту

. не является переменным со значением. Это (специальный) файл в файловой системе. Вы не можете изменить это.

0
20.01.2015, 13:51
3 ответа

Используйте wc -l дважды и вычтите результаты.

before=$(wc -l < yourfile)
sleep 60
after=$(wc -l < yourfile)
let dif=after-before
echo "$dif"

Вы также можете просто вывести последние $ dif строки:

tail -n$dif yourfile

Хотя за это время можно было добавить больше строк, ни одна из операций здесь не является атомарной.

Если вы хотите отслеживать инкрементные изменения (по крайней мере, количество добавленных строк), просто записывайте вывод команды wc -l каждую минуту. Однако нет возможности сделать это, не зная заранее, что вам это понадобится.Если у вас нет временных меток в каждой строке, вы не сможете узнать, какая часть файла была добавлена ​​и когда.

3
28.01.2020, 02:15

Это мое окончательное решение:

#!/bin/bash

for i in *access_log; do
        (
        before=$(wc -l < $i)
        sleep 10
        after=$(wc -l < $i)
        let dif=after-before
        echo "$i: $dif"
        ) &
done
1
28.01.2020, 02:15
{
  tail -c 1 > /dev/null
  sleep 60
  wc -l
} < your-file

С ksh93 :

{ sleep 60; wc -l; } < your-file <#((EOF))

Это открывает файл, ищет до конца (в первом чтении и отбрасывании одного байта), затем засыпает 60 секунд, а затем вызывает wc - l для подсчета количества символов новой строки между позицией, в которой мы находились 1 минуту назад, и (новым) концом файла (если оно больше).

Обратите внимание, что он читает только тот раздел, который был добавлен в течение этих 60 секунд. Если файл был полностью переписан, при этом не будет учтено возможное изменение количества символов новой строки в исходной части файла.

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

Если вы хотите узнать, с какой скоростью строки добавляются в файл журнала, другой вариант - использовать pv -l с tail -f :

for f in *access_log; do
  tail -fn0 -- "$f" | pv -cN "$f" -ral > /dev/null &
done
wait

-ra для текущей и средней ставки. -l , поэтому скорость выражается в количестве строк в секунду.

2
28.01.2020, 02:15

Теги

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