2013-01-21 35 views
5

這裏是data.txt中:如何在R中讀取linux進程狀態(ps)命令的輸出?

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.0 0.0 2280 728 ?  Ss 20:44 0:00 init [2]  
root   2 0.0 0.0  0  0 ?  S 20:44 0:00 [kthreadd] 
root  202 0.0 0.0  0  0 ?  S< 20:44 0:00 [ext4-dio-unwri 
root  334 0.0 0.1 2916 1452 ?  Ss 20:44 0:00 udevd --daemon 

如何將數據讀入一個data.frame?
1.可沒有來決定分離器
最後場是一個問題,space不能分離,
INIT [2],udevd會--daemon是一個字段,不能由space分離。
2.no固定寬度
每行都有不同的寬度。

那麼,我怎樣才能將data.txt讀入data.frame?

+2

你肯定沒有固定的寬度在這裏?這似乎是固定的寬度,除了最後一列。 – A5C1D2H2I1M1N2O1R2T1

+0

我可以通過'read.fwf(「data.txt」,widths = c(4,10,5,5,7,6,4,10,6,7,20 ),skip = 1)'。無法使標題正常工作,這就是爲什麼我有'skip = 1',但這些很容易添加。最後一個寬度可以設置得比您期望的大得多,您應該沒問題...我想。 ... – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto - 我認爲使用'read.fwf'將會產生問題,因爲用於生成此文本的'ps' linux命令在每次運行時都會使用不同大小的列,這取決於需要打印的值。我在下面評論說,使用該程序時可以手動指定輸出格式。 – thelatemail

回答

0

你的數據格式是什麼?如果您可以在Excel中打開它,並將其保存爲製表符分隔文件,這很可能是繼續前進的最佳方式。

將文件保存爲製表符分隔文件是準備導入R的數據的更常用方法之一。這可以通過'保存爲''.txt(製表符已刪除)'在Excel中完成。一旦做到這一點:

my_data <- read.table("path/to/file/", header = TRUE, sep = "\t") 

sep = "\t"告訴[R,你的文件標籤deliminated

+1

請在linux'ps aux中使用命令',你可以得到格式文件,'\ t'不能在這裏使用。 –

+1

@KillKill - 如何將'ps aux'重定向到csv可能值得看這個問題:http://stackoverflow.com/questions/3114741/generating-a-csv-list-from-linux-ps Looking在'man ps'你可以指定輸出格式。 – thelatemail

4

我會做這樣的:

library(stringr) # has a convenient function for splitting to a fixed length 

raw   <- system("ps aux", intern = TRUE) 
fields  <- strsplit(raw[1], " +")[[1]] 
ps   <- str_split_fixed(raw[-1], " +", n = length(fields)) 
colnames(ps) <- fields 
+0

太棒了,避免了任何外部文件 - I/O! 'raw'是一個R內建函數,最好不要影響它,而是將變量'out'調用。 – smci

2

這裏是一個班輪應該做的伎倆:

do.call(rbind, lapply(strsplit(readLines("data.txt"), "\\s+"), function(fields) c(fields[1:10], paste(fields[-(1:10)], collapse = " ")))) 

這就是它在細節:

  1. 經由readLines(在字符向量的結果,其中每個向量元素是文件的一行)

  2. 使用strsplit分割各行成由空格分隔strigs讀取的文件中的所有行(\\s+

  3. 爲每個線(lapply),合併,落入本領域10後成一個(經由paste(..., collapse = " ")所有字段)---這產生,其中每個列表元素表示文件的一行,併爲字符向量的列表長度爲11(每場一個)

  4. 最後調用rbind到列表合併成一個矩陣(或數據幀)

相關問題