[問題] 用 regexp 切割文字串流為一個個檔案

作者: Gold740716 (項為之強)   2019-07-19 13:53:15
最近有一批每秒一筆的資料,
本來是切割成一天天的檔案,但發現他的切割時間錯誤,
變成一天從 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 好像蠻簡單的。
作者: dibery (簡哥)   2019-07-21 21:00:00
*.log 會在執行期間寫入新資料嗎 內容格式取幾行範例出來會漏資料感覺滿怪的 行結尾有一致嗎

Links booklink

Contact Us: admin [ a t ] ucptt.com