我想关注JSON日志文件log.json
并删除一个属性。我想将没有此属性的文件转发到日志服务器。我可以每10秒移除一次该属性,但我需要记住位置以某种方式只获得添加的行。
tail -f file.json | jq 'del(.timestamp)' >> filtered_file.json
现在我希望能够恢复这样的过程。有没有简单的方法可以获得自上次检查以来添加的json条目?
我想告诉rsyslog转发filtered_file.json
- 但是这只有在不断增长时才有意义。我可以每隔60秒左右用cron运行过滤。
答案 0 :(得分:1)
使用这样的脚本怎么样:
#!/bin/bash
INPUT="file.json"
OUTPUT="filtered_file.json"
TEMPO="/tmp/tmpfile.json"
DELAY_SECONDS=60
LAST_MD5=(`md5sum "${INPUT}"`)
while :
do
# Get filtered input
cat "${INPUT}" | jq 'del(.timestamp)' > "${TEMPO}"
# Count different lines between input and output
DIFF_COUNT=`diff -n "${TEMPO}" "${OUTPUT}" |\
cut -d" " -f2 | head -n 1`
# If any change detected: update output file
if [ "${DIFF_COUNT}" != "" ]
then
tail -n "${DIFF_COUNT}" ${TEMPO}
tail -n "${DIFF_COUNT}" "${TEMPO}" >> "${OUTPUT}"
LAST_MD5=(`md5sum "${INPUT}"`)
fi
# Check if input file has changed
# it prevents using jq on every iterations
MD5_INPUT=(`md5sum ${INPUT}`)
while [ "${LAST_MD5}" = "${MD5_INPUT}" ]
do
sleep ${DELAY_SECONDS}
MD5_INPUT=(`md5sum "${INPUT}"`)
done
done