我有一個日誌文件,姑且稱之爲mylogfile.txtR系統調用AWK失敗
格式是 日期戳,然後分號分隔符,然後一些其他的東西,我,爲這項工作的目的,漠不關心。
例如,(這是在日誌文件中的所有一行 - 不知道如何在SO表現爲這樣所以道歉)
20170710-23:59:43.158;[email protected]@[email protected]:15:[email protected]@2017071023:59:[email protected]@[email protected]:59:43.156#[email protected]@[email protected]:15:[email protected]@20170710-23:59:[email protected]@[email protected]:59:43.156#[email protected]@[email protected]:15:[email protected]@20170710-23:59:[email protected]@[email protected]:59:43.156#[email protected]@[email protected]:15:[email protected]@20170710-23:59:[email protected]@[email protected]:59:43.156#
什麼我目前試圖簡單地說就是概念實例的證明。我希望解析文件,顛倒行順序,並返回輸出中的兩列 -
1)只是從第一列解析的時間戳(這是一個日期時間格式,所以我需要放棄日期部分)
2)在自午夜秒錶示即時間戳,表示以毫秒精度(符合時間戳本身的粒度。
從輸出下面的單線例子是例如所以
23:59:43.158,86383.158
我c一半在那裏。我可以使用在cygwin中完美運行的語法構造對awk的調用(自然地剝離了R包裝)。不過,這並不R內
testawk<-paste0("tac ", mylogfile.txt, " | awk 'BEGIN {FS=\"-|;|:\"} {OMFT=\"%.3f\"} {print $2 \":\" $3 \":\" $4 \",\" (3600*$2)+(60*$3)+$4}' ")
getawk<-as.data.frame(system(testawk, intern=TRUE, show.output.on.console = FALSE))
工作,但是什麼數據幀getawk結束僅僅是原始日誌文件攪動通過,因爲它是被讀取。另外,我拿到運行命令有狀態1.
警告郵件,但是
,如果我去掉了「TAC」一塊,只使用直AWK,從而;
testawk<-paste0("awk 'BEGIN {FS=\"-|;|:\"} {OMFT=\"%.3f\"} {print $2 \":\" $3 \":\" $4 \",\" (3600*$2)+(60*$3)+$4}' ", mylogfile.txt)
getawk<-as.data.frame(system(testawk, intern=TRUE, show.output.on.console = FALSE))
我得到錯誤信息
Error in system(testawk, intern = TRUE, show.output.on.console = FALSE) : 'awk' not found
我不認爲這個問題是在我的awk的建設,因爲它工作正常,如果我只是做cygwin的範圍內。所以很明顯r/system/awk交互的一些方面我沒有完全掌握。我想如果我把它全部包裝在一個awk腳本中,並簡單地調用它的腳本它可能工作,但我很沮喪,我不能簡單地找到正確的語法來直接調用awk R系統命令(我處理grep,sed等命令等)。
這不像awk實際上根本不被支持那麼簡單嗎?
指針非常感謝。如果第一個說20行的日誌文件是有用的,我也可以發佈這些。
爲什麼你想使用'awk'呢?你可以在沒有太多痛苦的情況下做到這一點。 – nicola