【问题标题】:Printing only lines with timestamps larger than a input timestamp?只打印时间戳大于输入时间戳的行?
【发布时间】:2014-08-15 04:29:40
【问题描述】:

我正在使用Python 处理来自 hadoop 文件系统的输出,其中包含时间戳和文件名。

由于输出很长,我只想打印没有检查的行。

为此,我将存储一个时间戳last_ts,这是最后一次检查系统的时间。

要打印整个输出,我使用的是命令

hadoop fs -ls /path/to/donemarkerfiles/ | sort -k 6 |awk '{print $6" "$7" "$8} '

其中 6 是日期,7 是时间,8 是内容。

我想将 6 和 7 与 last_ts 进行比较,并且只打印某些行。

我该怎么做?我尝试在awk 中使用if 条件,但我跌跌撞撞地放弃了。


样本输出:

2014-06-23 05:45 /user/hdfs/warehouse/donemarkers/20140621_basic.done
2014-06-23 07:13 /user/hdfs/warehouse/donemarkers/20140621_stat.done
2014-06-23 08:08 /user/hdfs/warehouse/donemarkers/20140621_raw.done
2014-06-23 09:30 /user/hdfs/warehouse/donemarkers/20140621_join.done
2014-06-23 09:31 /user/hdfs/warehouse/donemarkers/20140621_upload_file.done
2014-06-23 15:52 /user/hdfs/warehouse/donemarkers/20140622_basic.done
2014-06-23 20:23 /user/hdfs/warehouse/donemarkers/20140622_stat.done
2014-06-23 21:40 /user/hdfs/warehouse/donemarkers/20140622_raw.done
2014-06-23 22:57 /user/hdfs/warehouse/donemarkers/20140622_join.done
2014-06-23 22:58 /user/hdfs/warehouse/donemarkers/20140622_upload_file.done

【问题讨论】:

  • 你在哪里存储last_ts?您在 awk 中为 if 尝试了什么?
  • 显示一些示例输入和last_ts的值
  • hadoop fs -ls /path/to/done | sort -k 6 |awk if ($6 > '2014-05-30 05:05') '{print $6" "$7" "$8} '
  • last_ts = '2014-05-30 05:05'
  • 是的,我看到了。显示 hadoop 命令的输出中的 5 条随机行。

标签: bash unix command-line awk grep


【解决方案1】:

这个很难弄清楚,我想主要是因为我不是 awk 专家。然而,这是繁重的工作:

cat /tmp/data | awk '{"date -d \"" $1 " " $2 "\" +%s"|getline secs; print secs, $0}'

使用 awk 调用标准的 date util 以格式化为 epoch secs,并使用 getline 将该返回值分配给 awk 变量。在我的命令中,我刚刚打印了所有内容,现在让我们进行过滤。

cat /tmp/data | awk '{"date -d \"" last_ts "\" +%s"|getline mindate; "date -d \"" $1 " " $2 "\" +%s"|getline secs; if (secs > mindate) print $0}'

现在我们有两个cmd|getline var 形式的东西,看起来很笨拙。我会把它放在一个脚本中(带有评论),但我永远不会“现场”输入它。另外,我不清楚last_ts 住在哪里。已经在 awk 脚本中了吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    相关资源
    最近更新 更多