2013-05-09 21 views
0

我需要從碼這樣解析數字:如何從代碼中的數組中解析數字?

p1 <- c(1, 2, 100, 23, 0.12, 0.03, 0) 
p2 <- c(100, 200, 1, 23, 0.12, 0.03, 0) 
p30 <- c(100, 200, 1, 23, 0.12, 0.03, 0) 
p300 <- c(100, 200, 1, 23, 2, 1, 0) 
more variables starts with p... 
other codes... 

的結果是這樣的:

1 2 100 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 2 1 0 

,其中每行代表一個變量數組。

我試過sedawk,但沒有解決問題。有沒有人有關於此的想法?謝謝!

+1

請出示你已經嘗試了什麼。它看起來像是用'sed'應該是微不足道的 - 刪除所有的內容(''和remove','和')'。 – Barmar 2013-05-09 14:44:30

+0

我不知道你在做什麼......你有看起來像第一個框的文本,並且你正在嘗試使用sed或awk在第二個框中生成結果嗎?或者你真的需要解析這些數字嗎? – 2013-05-09 14:46:02

回答

2

使用GNU sed(for -r和EREs):

$ cat file 
p1 <- c(1, 2, 100, 23, 0.12, 0.03, 0) 
p2 <- c(100, 200, 1, 23, 0.12, 0.03, 0) 
p30 <- c(100, 200, 1, 23, 0.12, 0.03, 0) 
p300 <- c(100, 200, 1, 23, 2, 1, 0) 

$ sed -r 's/.*\(|[,)]//g' file 
1 2 100 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 2 1 0 
0

假設你有它在文件t.txt:

$ grep ^p t.txt|sed 's/.*[(]//; s/[)].*//; s/,//g' 

1 2 100 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 2 1 0 
2

AWK一行代碼:

kent$ awk -F'[()]' '{gsub(/, */," ",$2)}$0=$2' file 
1 2 100 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 2 1 0 
+0

'$ 0 = $ 2'好戲!或者甚至更短的版本:'awk -F'[()]''{$ 0 = $ 2; gsub(/,* /,「」)} 1'' – TrueY 2013-05-09 15:28:19

+0

@ TrueY ura golfer :)'awk -F'[( )]''{gsub(/,* /,「」)} $ 0 = $ 2'' – Kent 2013-05-09 15:47:07

+1

@TrueY最短我可以得到'awk -F'(''gsub(/,|)/,s)&& $ 0 = $ 2 ''只用'awk' – 2013-05-10 08:46:33

1

隨着awktr的可讀性;-)

awk -F'[()]' '{print $2}' file | tr -d ',' 
0

您可以在bash的地方做到這一點,而無需調用外部程序。一個bash一行代碼:

#!/usr/bin/bash 

while read v; do v=${v#*(}; v=${v%)*}; echo ${v//,/}; done<<XXX 
p1 <- c(1, 2, 100, 23, 0.12, 0.03, 0) 
p2 <- c(100, 200, 1, 23, 0.12, 0.03, 0) 
p30 <- c(100, 200, 1, 23, 0.12, 0.03, 0) 
p300 <- c(100, 200, 1, 23, 2, 1, 0) 
XXX 

輸出:

1 2 100 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 0.12 0.03 0 
100 200 1 23 2 1 0