我想使用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仅提取冒号之后和每行后续逗号之前包含的信息? (或者,用冒号空格替换冒号和前面逗号之间的所有信息)。
谢谢!
答案 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
)