Unix 将此基于树的数据文件解析为平面文件csv的简单方法
我有一个不是标准格式的文本文件,但它以可预测的树状方式输出数据 它看起来像这样:Unix 将此基于树的数据文件解析为平面文件csv的简单方法,unix,text,Unix,Text,我有一个不是标准格式的文本文件,但它以可预测的树状方式输出数据 它看起来像这样: #group 0 size: 4 bs: 7.49113e-101 0 1 2 7 #group 1 size: 3 bs: 5.31707e-101 3 4 8 #group 2 size: 2 bs: 6.2351e-101 5 6 #group 3 size: 1 bs: 1 9 group | item | score 0 0 7.49113e-101 0 1 7.49113e-101
#group 0 size: 4 bs: 7.49113e-101
0 1 2 7
#group 1 size: 3 bs: 5.31707e-101
3 4 8
#group 2 size: 2 bs: 6.2351e-101
5 6
#group 3 size: 1 bs: 1
9
group | item | score
0 0 7.49113e-101
0 1 7.49113e-101
0 2 7.49113e-101
0 7 7.49113e-101
1 3 5.31707e-101
...
此文本文件中的条目是组,后面是组的大小、分数和项目标签。在第一种情况下:组0包含标签0、1、2、7(因此,其大小为4),分数为7.49113e-101
我想知道如何将这样一个文本文件解析为一个平面文件csv,看起来像这样:
#group 0 size: 4 bs: 7.49113e-101
0 1 2 7
#group 1 size: 3 bs: 5.31707e-101
3 4 8
#group 2 size: 2 bs: 6.2351e-101
5 6
#group 3 size: 1 bs: 1
9
group | item | score
0 0 7.49113e-101
0 1 7.49113e-101
0 2 7.49113e-101
0 7 7.49113e-101
1 3 5.31707e-101
...
我不是在寻找代码-只是需要知道我可以使用哪种语言在Unix系统上以最简单的方式完成这项工作。awk可以完成这项工作:
awk 'BEGIN{OFS="\t"; print "group", "item", "score"}
$1=="#group"{g=$2; s=$6; next} {for(i=1; i<NF; i++) print g, $i, s;}' data
awk'开始{OFS=“\t”;打印“组”、“项目”、“分数”}
$1=“#group”{g=$2;s=$6;next}{for(i=1;iRuby、Perl、Python将最简单,并且在所有现代Unice上都可用。大约10行以下的代码。awk值得一看