【发布时间】:2015-07-18 18:04:11
【问题描述】:
我有一个像这样的 R 汇总表:
employee salary startdate
John Doe :1 Min. :21000 Min. :2007-03-14
Jolie Hope:1 1st Qu.:22200 1st Qu.:2007-09-18
Peter Gynn:1 Median :23400 Median :2008-03-25
Mean :23733 Mean :2008-10-02
3rd Qu.:25100 3rd Qu.:2009-07-13
Max. :26800 Max. :2010-11-01
我需要像这样生成一个输出 csv 文件:
employee,,salary,,startdate,,
John Doe,1,Min.,21000,Min.,2007-03-14
Jolie Hope,1,1st Qu.,22200,1st Qu.,2007-09-18
Peter Gynn,1,Median,23400,Median,2008-03-25
,,Mean,23733,Mean,2008-10-02
,,3rd Qu.,25100,3rd Qu.,2009-07-13
,,Max.,26800,Max.,2010-11-01
所以在 excel 中它看起来像这样:
但是用一个或多个空格分隔字段是不够的,
awk -F "[ ]+" '{ print $3 }'
它适用于标题,但不适用于其余行:
salary
Doe
Hope:1
Gynn:1
:23733
Qu.:25100
:26800
这个问题可以使用 awk(也许还有 sed)解决吗?
【问题讨论】:
-
使用 awk
FIELDWIDTHS而不是FS拆分? -
如果我只有一个文件可以工作,但它是否适用于多个输入文件,其中列数发生变化并且每列的字段类型可能不同?我唯一可以确定的是,如果您将输入文件视为具有三列,则每列中的字段都有一个“:”..
-
@SonicProtein 不,您甚至不确定这一点,因为您的示例中第一列的最后 3 行中的字段没有
:(它们只是空白)。您将不得不想出一些方法来描述工具如何识别字段的位置。如果字段不是固定宽度并且前导字段可能为空,那么工具如何判断第 3 行的Mean :23733是第一个字段还是第 2 个但第一个字段为空? -
使用
("\t") 字符从 R导出数据?然后使用awk -f"\t" -v OFS="\t" '{awk program}'。祝你好运。 -
@Ed Morton,是的,你是对的,我会尝试找到一种方法来从 R 创建更好的输出。