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

其中每一行代表一个变量数组。

我试过sedand awk,但没有成功。有人对此有想法吗?谢谢!

4

5 回答 5

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
于 2013-05-09T14:51:20.070 回答
2

使用 GNU sed(用于 -r 和 ERE):

$ 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
于 2013-05-09T15:09:20.123 回答
1

具有awktr可读性;-)

awk -F'[()]' '{print $2}' file | tr -d ','
于 2013-05-09T14:55:51.683 回答
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
于 2013-05-09T14:46:48.300 回答
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
于 2013-05-09T15:18:18.557 回答