我想處理一個日誌文件(使用C),其中數據由雙冒號「::」分隔。我認爲像awk
和sed
這樣的工具將會非常有效。但是,awk輸出值可能會傳遞給我的C變量嗎? 例如,一種日誌信息是這樣的:如何使用C實現高效地處理日誌文件
a::b::c::d
和我有一個struct
由4個int
元件。如何將4個部分保存到結構元素中?
我想過使用strtok
libary調用作爲另一種方式,但在調用它之前,我必須從大量日誌信息中挑選合適的行,這使我更多地考慮sed
或grep
。
謝謝你的幫助。如果你有更好的選擇,那將是非常友善的分享它。
更新:我忘了強調上面提到的一切都是在運行時中完成的,包括「根據給定值對匹配行進行分類」,然後對其進行處理,然後存儲該值。 scanf
很好,但是如果裏面有空格的值是string
?
感謝您的幫助,但是如果我需要在運行時執行它並且日誌文件行包含帶有空格的描述字符串呢? – leowang
如果日誌文件是另一個程序的輸出,那麼可以很容易地將它輸入到'grep'中。但是如果你真的想用C做所有事情,我可以幫助你。但是,從另一個答案的評論中,我看到你說過:'對於內部有空格的字符串值,scanf無法正常工作。那麼這些字符串是如何分隔的呢?用'::'? – Shahbaz
是的,只是假定字符串值不會包含任何雙冒號。爲了更加準確,我有兩個函數('writelog'和'readlog')在一個日誌文件上運行。至於'writelog',我可以簡單地將其打開並將日誌追加到文件中。但是對於'readlog',我很困惑我應該如何整理匹配的'n'行,將這些元素一行一行地分開,並將它們分別存儲到'n'結構中。現在我正在使用'popen'並將命令'grep''logfile'傳遞給它,然後每次'getline'一行,但堅持如何分離元素。非常感謝您的回覆。 –
leowang