用 regexp 切割文字串流為一個個檔案 - Linux

Callum avatar
By Callum
at 2019-07-19T13:53

Table of Contents

最近有一批每秒一筆的資料,
本來是切割成一天天的檔案,但發現他的切割時間錯誤,
變成一天從 00:11:23 開始,在隔天的 00:11:22 結束。
想把他重新切割成在零點分割的檔案。

本來是這樣:

```sh
start_day=1
cat *.log | while true
do
sed /23:59:59/q > ../fix/$start_day.log
start_day=$((start_day+1))
done
```

但我發現在不同命令間會漏掉一些資料。

後來想到的解法是一天天解決:

```sh
for day in `seq 10`
do
sed -n '/00:00:00/,$p' $day.log > ../fix/$day.log
sed -n '1,/23:59:59/p' $((day+1)).log >> ../fix/$day.log
done
```

另外一個選項是用 split 用行數拆分,
但我發現這些檔案好像不是完整每秒都有,
所以一天會不到 86400 筆。

有辦法在 shell 用 regexp 分割管道來的資料嗎?
我試過用 sed 和 awk 在執行下一個命令時都會漏掉資料,
但用 dd 就不會漏。

如果寫個 perl 或 python 好像蠻簡單的。

--
如果孔子是那待沽的玉
我便是待斟的酒
用一生的時間 蘊釀自己的濃度
只為等待剎那的傾注

張曉風 釀酒的理由

--
Tags: Linux

All Comments

Wallis avatar
By Wallis
at 2019-07-24T05:50
*.log 會在執行期間寫入新資料嗎 內容格式取幾行範例出來
Ula avatar
By Ula
at 2019-07-27T17:14
會漏資料感覺滿怪的 行結尾有一致嗎

檔名如何隨 loop 變數改變

Oscar avatar
By Oscar
at 2019-07-14T18:28
大家好 我希望執行 Samtools 軟體的 tabix 功能之後,能在輸出的檔名中放入變數 使用的指令如下: Usage: tabix [FILE] [REGION] andgt; [OUTPUT_FILE] for i in {1..9} do echo and#34;tabix A. ...

AMD 釋出BIOS更新解決 Destiny 2 和 Linux 發行版問題

Bennie avatar
By Bennie
at 2019-07-14T09:28
消息來源: AMD Releases BIOS Fix To Motherboard Partners For Booting Newer Linux Distributions https://bit.ly/2XOf1Xq ( https://www.phoronix.com/scan.php?page= ...

子程序自動終止

Elizabeth avatar
By Elizabeth
at 2019-07-13T16:19
想問一下 如果說在script中設計一些背景執行的指令 例如 command1 andamp; command2 andamp; 如何在終止(用ctrl + C)這些script後一併把這個script所觸發的所有子程序殺掉 一般來說都要使用ctrl + Z 後 在kill jobs 才有辦法一次殺光 但 ...

含sudo 的批次檔可以自動輸入密碼嗎?

Vanessa avatar
By Vanessa
at 2019-07-10T22:22
※ 引述《bfbf510a (超世紀智將)》之銘言: : 我不知道在linux 這「批次檔」要怎麼稱呼。 shell script 你要說批次檔也是可以 有人稱為命令稿 : 我想寫一個批次檔放在桌面,雙擊就可以召喚terminal 執行我寫的指令。可是,一旦是sud : o 開頭的就要我手動輸入密碼才會執行 ...

含sudo 的批次檔可以自動輸入密碼嗎?

Xanthe avatar
By Xanthe
at 2019-07-10T20:10
我不知道在linux 這「批次檔」要怎麼稱呼。 我想寫一個批次檔放在桌面,雙擊就可以召喚terminal 執行我寫的指令。可是,一旦是sud o 開頭的就要我手動輸入密碼才會執行。 譬如我的批次檔是想執行 sudo radeontop 監視gpu 狀況,雙擊之後要輸入密碼,我想省卻 這個步驟 -- 自古紅藍 ...