請問資料擷取問題 - Linux

Table of Contents


我有一個檔案是記錄一些log的..檔名叫做Test_log
但是這檔案大於10mb,會把Test_log 存成Test_log1
之後再收到的log,會繼續存成新的Test_log
如果在有檔案在大餘10mb,就會將原本的Test_log1刪除,再將Test_log存成Test_log1
大約就是這個模式在記錄log...


我為了讓這個log都能保存下來...所以我寫了一個簡單的Script放在crontab
大概指令如下
cat Test_log Test_log1 > Test_long_log
diff Test_log Test_long_log > Test_diff_log
cp Test_long_log Test_long_log1
cat Test_diff_log Test_long_log1 >> Test_long_log

現在遇到一個問題 Test_long_log,檔案越來越大,
目前已經達到4gb了,所以我在windows也開不起來了

而這些log,都是記錄我一些sensor data,格式大約如下

2013-Oct-10 11:01:02 sensor1,sensor2,sensor3
2013-Oct-10 11:01:06 sensor1,sensor2,sensor3
2013-Oct-10 11:01:09 sensor1,sensor2,sensor3
.
.
.
2013-Oct-10 11:01:13 sensor1,sensor2,sensor3


因為這些sensor資料,我大約每個小時只需要一筆即可...
是否有機會依照小時去做資料擷取..
或是更簡單一點,每100行,我只需要截取第一行即可...


是否有其他方式去讓我log能完整保留,因為如果真的可以每100行只保留一行
那我需要面對另一個問題是,如何算是哪個些資料是新增的,要將他寫入 Test_long_log

請網友幫幫忙..謝謝

--

All Comments

Dora avatarDora2013-10-19
為什麼要寫入diff? 然後每100行存一個可以用sed
Xanthe avatarXanthe2013-10-20
還有,增加內容可用>>解決,一堆tmp file很慢又難看懂
Doris avatarDoris2013-10-20
你直接更改syslog的設定比較快 把facility的level調高
Liam avatarLiam2013-10-21
你覺得不需要記錄到log的就設定不要記錄
Yedda avatarYedda2013-10-24
或是把不同的訊息記錄丟到不同的log檔
Kama avatarKama2013-10-27
你這樣設定排程cat來cp去的 是在浪費系統資源
Blanche avatarBlanche2013-10-29
sed -n '1~100p' ?
Daniel avatarDaniel2013-10-31
按你的描述, 似乎只要記錄 Test_log1 的第一筆, 供下次檢查,
就可以知道是不是新的 Test_log1 ...
Zanna avatarZanna2013-11-01
也就是說, 若可等 Test_log 被轉存到 Test_log1 後再來處理,
那問題應該就簡單許多了吧 ??
Anonymous avatarAnonymous2013-11-05
sed -n '1~100p' 只會擷取前一百行..和我需求不同
James avatarJames2013-11-09
可等 Test_log 被轉存到 Test_log1 後再來處理...感謝提醒
這部分應該是比較簡單...只是我還是要用到cp和cat才能將
Skylar DavisLinda avatarSkylar DavisLinda2013-11-12
Test_log1存進去Test_long_log
Erin avatarErin2013-11-13
awk '( NR%100==0 ){print $0}' Test_log1
Sarah avatarSarah2013-11-15
while true; do tail -1 Test_log; sleep 3600; done
Belly avatarBelly2013-11-19
鬼遮眼. 不用{print $0}的...
Blanche avatarBlanche2013-11-21
awk '( NR%100==0 )' Test_log1 就好了
Doris avatarDoris2013-11-22
1~100的思意和你相的不一樣喔... 那是sed address init~step
Ula avatarUla2013-11-24
sed -n '1~100p' Test_log1 >>Test_long_log
Poppy avatarPoppy2013-11-26
sed -n '1,100p' 才是前一百行.
Poppy avatarPoppy2013-11-30
sed -n '1~100p' 是每隔一百行, 從第一行開始.
Edward Lewis avatarEdward Lewis2013-12-02
是說如果都在linux上了,可以用inotify()去看檔案有沒有被動到
Caroline avatarCaroline2013-12-03
若要用 inotify() 大概就要移駕 LinuxDev 板了 :P
Susan avatarSusan2013-12-07
翻回去忽然看到這句話:
Sierra Rose avatarSierra Rose2013-12-11
因為這些sensor資料,我大約每個小時只需要一筆即可...
Jacob avatarJacob2013-12-13
意思就是, 其實只要一小時跑一次 cron job
Andy avatarAndy2013-12-18
而 cron job 就只要用 tail -1 抓最後一筆 Test_log 即可.
Joseph avatarJoseph2013-12-23
tail -1 Test_log >> Test_long_log
Daph Bay avatarDaph Bay2013-12-23
頂多, 加一點檢查, 看 Test_long_log 和 Test_log 的最後一行
如果相同, 就不要 append 到 Test_long_log.
Elvira avatarElvira2013-12-24
咦, 原來11樓r大已寫了 tail, 只是我被那句 鬼遮眼 也給遮了:P
Selena avatarSelena2013-12-25
啊, 更上面其實還有6樓... 所以是 "編輯" 過後的11樓.
Ula avatarUla2013-12-26
謝謝各位給我這些想法,等一下就試試
David avatarDavid2013-12-26
sed -n '1~100p’ 我電腦認不得1~100p意思
Brianna avatarBrianna2013-12-30
但每小時tail一次的方法可行,謝謝
Elizabeth avatarElizabeth2013-12-31
'1~100p'不認得? sed --version 或 sed -V 看一下是什麼版本?