试图让以下工作有点麻烦。使用时间戳bash删除超过一个小时的文件中的行
我有如下含hostname:timestamp
文件:
hostname1:1445072150
hostname2:1445076364
我想创建一个bash脚本,将查询这个文件(使用cron作业),以检查时间戳在1小时老如果是这样,请删除该行。 下面是我到目前为止,但它似乎并没有删除文件中的行。
#!/bin/bash
hosts=/tmp/hosts
current_timestamp=$(date +%s)
while read line; do
hostname=`echo $line | sed -e 's/:.*//g'`
timestamp=`echo $line | cut -d ":" -f 2`
diff=$(($current_timestamp-$timestamp))
if [ $diff -ge 3600 ]; then
echo "$hostname - Timestamp over an hour old. Deleting line."
sed -i '/$hostname/d' $hosts
fi
done <$hosts
我设法得到时间戳部分识别是一个多小时过去,但有麻烦删除该文件中的时间主机正常工作。
我怀疑它可能是由于while循环保持文件打开,但不是100%确定如何解决它。还尝试制作一个文件的副本并编辑,但仍然没有。
另外:如果有更好的方法来得到这个工作,并产生相同的结果,我愿意接受建议:)
任何帮助将非常感激。
干杯
改变封闭于'DIFF = $提取的主机名部分和时间戳部分而没有任何副壳
Cheers @amdixon。这似乎已经成功了。非常感谢:) – Kev
不用担心,代码几乎已经工作 – amdixon