簡體   English   中英

歸檔文本文件時間序列之間的差異

[英]Archiving differences between time sequence of text files

有一個傳感器網絡,我每十分鍾或按需下載測量值。 每個下載都是一個文本文件,由幾行組成,帶有時間戳和值。 文本文件的名稱還包含下載發生的時間戳。 所以隨着時間的推移,我收集了很多文本文件,其中包含一個序列。 由於取值的物理參數,相鄰文本文件之間幾乎沒有差異。

因為我想以一種有效的方式將所有正在下載的文本文件存檔到(壓縮)文件中。 所以我認為歸檔相鄰文本文件之間的差異就是這樣一種方式。

我想要一些想法在 BASH 中解決,使用眾所周知的工具,如 tar 和 diff。 我也知道 git,但它對創建存檔文件沒有用。

我會試着澄清一下。 文本文件由以下空格分隔格式的多行組成:

時間戳sensor_uuid value_1 ... value_N

並非每一行都具有完全相同的(比如 N 個)值,但每行標記的變化很小。 此外,值本身在時間上幾乎沒有變化。 由於它們來自傳感器,並且每行有一個傳感器,因此文本文件的行數取決於每次調用得到的響應數量。 零線是可能的。

最后,文本文件名采用自己的時間戳,原始名稱與日期時間字符串的串聯:

sensor_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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM