使用时间戳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%确定如何解决该问题。还尝试制作该文件的副本并对其进行编辑,但仍然一无所获。

替代地:如果有更好的方法使它起作用并产生相同的结果,我愿意提出建议:)

任何帮助将非常感激。

干杯

亚诺斯

您的脚本中的问题就是这一行:

sed -i '/$hostname/d' $hosts

单引号内的变量不会扩展为它们的值,因此该命令试图替换字面意义上的“ $ hostname”而不是其值。如果将单引号替换为双引号,则变量将扩展为它的值,这是您在此处需要的:

sed -i "/$hostname/d" $hosts

有可能的改进:

#!/bin/bash

hosts=/tmp/hosts
current_timestamp=$(date +%s)

while read line; do
    set -- ${line/:/ }
    hostname=$1
    timestamp=$2
    ((diff = current_timestamp - timestamp))
    if ((diff >= 3600)); then
        echo "$hostname - Timestamp over an hour old. Deleting line."
        sed -i "/^$hostname:/d" $hosts
    fi
done <$hosts

改进之处:

  • sed命令中的模式更加严格,以使其更健壮并避免一些潜在的错误
  • 无需任何子shell即可更轻松地提取主机名部分和时间戳部分的方法
  • 通过将其括起来,可以简化算术运算 ((...))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用时间戳打印最后一个bash命令的最简单标准方法

来自分类Dev

使用时间戳打印最后一个bash命令的最简单标准方法

来自分类Dev

如何使用时间戳作为参考合并 SQL Server 2014 中同一个表中的记录

来自分类Dev

使用awk的bash脚本使用时间戳重命名文件

来自分类Dev

如何使用时间戳在 Perl 中获取最近的文件

来自分类Dev

使用时间戳过滤Gmail

来自分类Dev

在Excel中使用时间戳

来自分类Dev

在PHP中使用时间戳

来自分类Dev

使用正则表达式使用时间戳 Bash 多个副本最新文件

来自分类Dev

一组列作为 Mysql 中的唯一键,但使用时间戳作为一天

来自分类Dev

Bash脚本使用时间戳检查端口可用性

来自分类Dev

使用时间戳和日期时间的TSQL排名

来自分类Dev

使用时间戳计算员工的工作时间

来自分类Dev

通过Python中的Pandas删除时间戳在上一个滑动窗口中的行

来自分类Dev

从表中删除重复的行,除了每天的第一个时间戳

来自分类Dev

在Oracle中使用时间戳比较两个日期

来自分类Dev

如何在UTC中使用时间戳“触摸”文件?

来自分类Dev

vim-使用时间戳同时浏览多个文件

来自分类Dev

转到网络服务器-不要使用时间戳缓存文件

来自分类Dev

vim-使用时间戳同时浏览多个文件

来自分类Dev

Linux查找命令-显示超过7天的文件-不使用时间戳

来自分类Dev

Python服务-使用时间戳写入文件名

来自分类Dev

删除 CSV 文件中的所有行,而在另一个 CSV 文件中没有对应/匹配的时间戳

来自分类Dev

使用时间戳多次将sp_who的结果插入表中

来自分类Dev

RedShift-使用时间戳列中的日期更新表

来自分类Dev

使用时间戳为 R 中的 Foverlaps 检索 Y (RIGHT JOIN) 的不匹配项

来自分类Dev

使用时间序列上的线性预测来确定下一个K点

来自分类Dev

如何使用时间戳从mysql中选择数据

来自分类Dev

如何使用时间戳构造函数

Related 相关文章

  1. 1

    使用时间戳打印最后一个bash命令的最简单标准方法

  2. 2

    使用时间戳打印最后一个bash命令的最简单标准方法

  3. 3

    如何使用时间戳作为参考合并 SQL Server 2014 中同一个表中的记录

  4. 4

    使用awk的bash脚本使用时间戳重命名文件

  5. 5

    如何使用时间戳在 Perl 中获取最近的文件

  6. 6

    使用时间戳过滤Gmail

  7. 7

    在Excel中使用时间戳

  8. 8

    在PHP中使用时间戳

  9. 9

    使用正则表达式使用时间戳 Bash 多个副本最新文件

  10. 10

    一组列作为 Mysql 中的唯一键,但使用时间戳作为一天

  11. 11

    Bash脚本使用时间戳检查端口可用性

  12. 12

    使用时间戳和日期时间的TSQL排名

  13. 13

    使用时间戳计算员工的工作时间

  14. 14

    通过Python中的Pandas删除时间戳在上一个滑动窗口中的行

  15. 15

    从表中删除重复的行,除了每天的第一个时间戳

  16. 16

    在Oracle中使用时间戳比较两个日期

  17. 17

    如何在UTC中使用时间戳“触摸”文件?

  18. 18

    vim-使用时间戳同时浏览多个文件

  19. 19

    转到网络服务器-不要使用时间戳缓存文件

  20. 20

    vim-使用时间戳同时浏览多个文件

  21. 21

    Linux查找命令-显示超过7天的文件-不使用时间戳

  22. 22

    Python服务-使用时间戳写入文件名

  23. 23

    删除 CSV 文件中的所有行,而在另一个 CSV 文件中没有对应/匹配的时间戳

  24. 24

    使用时间戳多次将sp_who的结果插入表中

  25. 25

    RedShift-使用时间戳列中的日期更新表

  26. 26

    使用时间戳为 R 中的 Foverlaps 检索 Y (RIGHT JOIN) 的不匹配项

  27. 27

    使用时间序列上的线性预测来确定下一个K点

  28. 28

    如何使用时间戳从mysql中选择数据

  29. 29

    如何使用时间戳构造函数

热门标签

归档