我想使用 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 仅提取每行冒号之后和后续逗号之前包含的信息?(或者,用空白的 spance 替换冒号和前面逗号之间的所有信息)。
谢谢!
有了awk
,你可以尝试这样的事情:
awk -F, '{split($3,ary,/:/); print ary[2]}' input
您需要更改$3
的位置,其中包含持续时间列的列号。
我会在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
"[["只是一个提取函数,通常用于中缀语法,但它也可以以更典型的R功能方式使用"[["( . , .)
。strsplit
创建的对象内容的每个单独值都将提取其第二个参数。
sed "s/.*:([^,]*).*/1/"
替代品 ( s/.../.../
)
匹配所有内容,包括冒号(.*:
)
第一个(
和)
之间的内容被捕获到1
中,可用于替换
匹配(并捕获)所有内容,只要它不是逗号([^,]*
)
匹配行的其余部分(因此它也会被替换)(.*
最后用您捕获的部分替换之前匹配的所有内容(1
)