【发布时间】: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