使用sed提取R摘要

时间:2014-02-25 18:31:51

标签: regex r bash sed

我想使用sed将R的data.frame摘要的标准输出转换为CSV。

假设我有5列用逗号分隔的信息,其中一列称为持续时间。

...,       duration          , ...

..., Min.   : 0.000 ,...   

..., 1st Qu.: 2.000 ,...   

..., Median : 5.000 ,...    

..., Mean   : 6.004 ,... 

..., 3rd Qu.: 9.000 ,...   

..., Max.   :15.000 ,...    

..., NA's   :18711 ,...        

如何使用sed仅提取冒号之后和每行后续逗号之前包含的信息? (或者,用冒号空格替换冒号和前面逗号之间的所有信息)。

谢谢!

3 个答案:

答案 0 :(得分:1)

使用awk,您可以尝试以下内容:

awk -F, '{split($3,ary,/:/); print ary[2]}' input

您需要使用持续时间列的列号更改$3

答案 1 :(得分:0)

我会在R中做更多。summary()的输出有点难看,是一个字符值矩阵。这将首先从该表中提取值作为字符值,然后再以数字形式提取。

apply( summary(df1), 2, function(x) sapply( strsplit(x, ":"), "[[", 2))
      Year     Site1
 "2006  "  "1.000  "
 "2007  "  "1.625  "
 "2008  "  "2.600  "
 "2008  "  "2.283  "
 "2010  "  "2.975  "
 "2011  "  "3.100  "

apply( summary(df1), 2, function(x) as.numeric( sapply( strsplit(x, ":"), "[[", 2)))
          Year     Site1
[1,]      2006     1.000
[2,]      2007     1.625
[3,]      2008     2.600
[4,]      2008     2.283
[5,]      2010     2.975
[6,]      2011     3.100

答案 2 :(得分:0)

sed "s/.*:\([^,]*\).*/\1/"

替换(s/.../.../

匹配所有内容,包括冒号(.*:

第一个\(\)之间的内容被捕获到\1,可用于替换

匹配(并捕获)所有内容,只要它不是逗号([^,]*

匹配该行的其余部分(因此也会被替换)(.*

最后将所有匹配的内容替换为您捕获的部分(\1