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

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 好像蠻簡單的。

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

張曉風 釀酒的理由

--

All Comments

Wallis avatarWallis2019-07-24
*.log 會在執行期間寫入新資料嗎 內容格式取幾行範例出來
Ula avatarUla2019-07-27
會漏資料感覺滿怪的 行結尾有一致嗎