我希望使用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仅提取每一行冒号后面和后面逗号之前包含的信息?(或者,用空格替换冒号和前面逗号之间的所有信息)。
谢谢!
发布于 2014-02-25 18:36:20
使用awk,您可以尝试这样的方法:
awk -F, '{split($3,ary,/:/); print ary[2]}' input其中,您需要用持续时间列的列号来更改$3。
发布于 2014-02-25 20:28:42
我会在R中做得更多,摘要()的输出有点难看,是字符值的矩阵。这将从该表中提取值,首先作为字符值,然后作为数字。
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"[[“只是一个提取函数,通常在infix语法中使用,但也可以以R-典型的函数方式"[["( . , .) )使用。strsplit创建的对象内容的每个单独值都将被提取其第二个参数。
发布于 2014-02-25 22:12:57
sed "s/.*:\([^,]*\).*/\1/"替代物(s/.../.../)
匹配所有内容,包括冒号(.*:)
第一个\(和\)之间的什么被捕获到\1中,它可以用于替换
匹配(并捕获)一切,只要它不是逗号([^,]*)
匹配行的其余部分(因此它也会被替换) (.*)
最后,用您捕获的部分(\1)替换之前匹配的所有内容。
https://stackoverflow.com/questions/22023068
复制相似问题