存档文本文件的时间顺序之间的差异



有一个传感器网络,我每十分钟或按需从中下载一次测量值。每个下载都是一个文本文件,由几行和时间戳和值组成。文本文件的名称还包含下载发生时的时间戳。因此,随着时间的推移,我收集了许多文本文件,这些文件由一个序列组成。由于获取值的物理参数,相邻文本文件之间几乎没有差异。

因为我想以有效的方式将所有正在下载的文本文件存档到(压缩(文件中。所以我认为存档相邻文本文件之间的差异就是这样一种方式。

我想要一些想法在 BASH 中使用 tar 和 diff 等众所周知的工具来解决它。我也知道 git,但它对创建存档文件没有用。

我将尝试澄清一点。文本文件由以下空格分隔格式的几行组成:

时间戳 sensor_uuid value_1...value_N

并非每行都有完全相同(例如 N(的值,但每行的标记变化很小。此外,值本身在时间上几乎没有变化。由于它们来自传感器,并且每行只有一个传感器,因此文本文件的行数取决于我每次调用的响应数。零行是可能的。

最后,文本文件名采用自己的时间戳,原始名称与日期时间字符串的串联:

sensors_2019-12-11_153043.txt用于今天的 15:30:43 请求。

不用说,此示例文件名行中的时间戳通常早于文件名的时间戳,甚至还有从之前创建的文本文件中重复的行和时间戳。

因此,我对高效存档的想法是将第一个文本文件放入存档中,然后仅放置更新,即两个相邻文本文件之间的差异,最终将追溯到实际存档的第一个文本文件。但是在检索时,我需要获取一个完整的文本文件,就好像它本身已存档而不是与过去的区别一样。

Tar 接收整个文本文件,文本文件行之间的一些差异不会产生适合强压缩的可重复模式。

tar 命令已经识别重复模式并压缩它们。但是,如果要消除重复的部分,则可以使用"diff"命令对diff输出进行其他一些简单的操作,然后将所有内容重定向到文件。

假设我们有 2 个文件 "file1.txt" 和 "file2.txt",您可以使用此命令行仅获取从第二个文件 (file2.txt( 添加的行:

diff -u file1.txt file2.txt | grep -E "^+" | sed -E 's/^+//' | grep -v "+" 

然后,我们只需要将输出或重定向到同一文件(示例file2.txt(或另一个文件中,然后在tar操作之前删除File2.txt。

最新更新