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

看板Linux作者 (項為之強)時間6年前 (2019/07/19 13:53), 6年前編輯推噓0(002)
留言2則, 1人參與, 6年前最新討論串1/1
最近有一批每秒一筆的資料, 本來是切割成一天天的檔案,但發現他的切割時間錯誤, 變成一天從 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 好像蠻簡單的。 -- 如果孔子是那待沽的玉 我便是待斟的酒 用一生的時間 蘊釀自己的濃度 只為等待剎那的傾注 張曉風 釀酒的理由 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.127.95 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1563515599.A.036.html

07/21 21:00, 6年前 , 1F
*.log 會在執行期間寫入新資料嗎 內容格式取幾行範例出來
07/21 21:00, 1F

07/21 21:02, 6年前 , 2F
會漏資料感覺滿怪的 行結尾有一致嗎
07/21 21:02, 2F
不會寫入新資料。 你可以試試 ```sh yes | nl | { sed 4q sed 8q } ``` 的確會掉資料。 我試過用 pv 控制管道在低速掉的資料就會變少: ```sh yes | nl | pv -L 64 | { sed 4q sed 8q } ``` ※ 編輯: Gold740716 (114.37.44.148 臺灣), 07/22/2019 16:22:15
文章代碼(AID): #1TCLhF0s (Linux)
文章代碼(AID): #1TCLhF0s (Linux)