用 regexp 切割文字串流為一個個檔案 - Linux
By Callum
at 2019-07-19T13:53
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 好像蠻簡單的。
--
如果孔子是那待沽的玉
我便是待斟的酒
用一生的時間 蘊釀自己的濃度
只為等待剎那的傾注
張曉風 釀酒的理由
--
本來是切割成一天天的檔案,但發現他的切割時間錯誤,
變成一天從 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
By Wallis
at 2019-07-24T05:50
at 2019-07-24T05:50
By Ula
at 2019-07-27T17:14
at 2019-07-27T17:14
Related Posts
檔名如何隨 loop 變數改變
By Oscar
at 2019-07-14T18:28
at 2019-07-14T18:28
AMD 釋出BIOS更新解決 Destiny 2 和 Linux 發行版問題
By Bennie
at 2019-07-14T09:28
at 2019-07-14T09:28
子程序自動終止
By Elizabeth
at 2019-07-13T16:19
at 2019-07-13T16:19
含sudo 的批次檔可以自動輸入密碼嗎?
By Vanessa
at 2019-07-10T22:22
at 2019-07-10T22:22
含sudo 的批次檔可以自動輸入密碼嗎?
By Xanthe
at 2019-07-10T20:10
at 2019-07-10T20:10