[問題] 用 regexp 切割文字串流為一個個檔案
最近有一批每秒一筆的資料,
本來是切割成一天天的檔案,但發現他的切割時間錯誤,
變成一天從 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
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
Linux 近期熱門文章
21
56
PTT數位生活區 即時熱門文章