【发布时间】:2017-07-22 20:50:43
【问题描述】:
我昨天问过这个问题,但没有得到有效的答案,但其中大部分内容不够具体。
我有一个有趣的问题,我不太确定如何最好地解决,遍历一个列表。采用以下格式 -
element, date, unixTime, before, after
CZ, 12/27/07 3:55 PM, 1198788900, 42345, 42346
CZ, 12/27/07 5:30 PM, 1198794600, 42346, 42300
CZ, 12/27/07 7:05 PM,1198800300, 42300, 42000
JB, 12/27/07 7:05 PM,1198800300, 13722, 13500
I, 12/27/2007 7:05 PM, 1198800300, 4475, 4572
我想遍历每个唯一元素和每个日期,并在前后列中获取更改的符号。例如,我想要 2007 年 12 月 27 日的 3 行,用于 CZ JB 和 I。每天有数百万行,有时甚至数千行,我只需要打印一天中每个元素的最后一行。因此,12/27 有多个,可能是数百或数千个“CZ”行。我只需要拉出最后一个,然后打印输出“CZ,12/27/07, 1”或“CZ,12/27/07,-1”。对于 12/27,CZ 的最后一行是负方向,因此它打印 -1。对于 JB、我和所有其他元素,它也会做同样的事情。文件按unix时间排序,元素可以混用。我希望输出如下所示
element, date, direction
CZ, 12/27/07, -1
JB, 12/27/07, -1
I, 12/27/07, 1
CZ, 12/28/07, 1
JB, 12/27/07, -1
I, 12/27/07, -1
试图在 bash、python、perl 甚至类似 awk 之类的东西中找出一种简洁的方式来做这样的事情。对于每一天,它将为当天至少有一条线的每个元素提供一个方向。我考虑了这样做的缓慢方法,例如阅读文件,填充“元素”和“日期”表,然后执行 foreach 并比较每个集合以找到最大的 unix 时间,然后用它打印,但必须有一个更好的方式来运行一次。
【问题讨论】:
-
请,请,向我们展示你所做的。一个问题对 SO 来说是合法的,这很有帮助
-
当我看到“我想要 last line where ...”的问题时,我倾向于认为:反转文件,然后找到 first i> 行...