这类似于mysql query 中的 Compute dates and durations,除了我没有唯一的 ID 列可以使用,而且我的样本不是起点/终点。
作为一个有趣的实验,我将 cron 设置为ps aux > 'date +%Y-%m-%d_%H-%M'.txt
. 我现在有大约 250,000 个“机器正在运行的东西”的样本。
我想把它变成“进程| cmd | 开始| 停止”的列表。假设是“开始”事件是该对第一次存在,而“停止”事件是它停止存在的第一个样本:样本不可能“丢失”或任何事情。
也就是说,有哪些方法可以进行这种转换,最好使用 SQL(因为我喜欢 SQL,这似乎是一个不错的挑战)。假设 pids 不能重复,这是一项微不足道的任务(将所有内容放在一个表中,SELECT MIN(time), MAX(time), pid GROUP BY pid
)。但是,由于 PID/cmd 对是重复的(我检查过,有重复),我需要一种方法来执行真正的“查找所有连续段”搜索。
如有必要,我可以做一些形式
Load file0 -> oldList
ForEach fileN:
Load fileN ->newList
oldList-newList = closedN
newList-oldList = openedN
oldList=newList
但这不是 SQL,也不是很有趣。谁知道呢,我最终可能会在某个时候拥有真正的 SQL 数据来处理这个属性。
我正在考虑首先构建一个差异表,然后将所有关闭与所有打开连接起来,并在每次打开后拉出最小距离关闭,但我想知道是否有更好的方法。