转置大型csv文件

时间:2015-06-26 07:40:25

标签: csv transpose

我有一个巨大的csv文件格式

http://i.stack.imgur.com/ksQzS.png

我想以这种格式对其进行改编 我尝试了很多,但无法实现它。有什么方法我可以用awk做。 该文件包含数千条记录

http://i.stack.imgur.com/PHQ52.png

2 个答案:

答案 0 :(得分:2)

我的awk技能更多"功能性"优雅"但这可能会让你开始

awk -F'|' '{for(f=1;f<=NF;f++){x[NR subsep f]=$f}} END{for(f=1;f<=NF;f++){p="";for(r=1;r<=NR;r++){if(length(p))p=p "|";p=p x[r subsep f]}print p}}' file.csv
r1f1|r2f1|r3f1
r1f2|r2f2|r3f2
r1f3|r2f3|r3f3
r1f4|r2f4|r3f4
r1f5|r2f5|r3f5

<强> FILE.CSV

r1f1|r1f2|r1f3|r1f4|r1f5
r2f1|r2f2|r2f3|r2f4|r2f5
r3f1|r3f2|r3f3|r3f4|r3f5

因此,对于inout文件的每一行,字段都保存为一个名为x[]的二维数组,由行号(NR)和字段编号(1..NF)索引。在输入文件的末尾,在END{}内,我遍历文件中的字段数和记录数,并打印出转置,如果需要,在我去的时候添加管道符号。

答案 1 :(得分:1)

不幸的是,我不知道如何在awk中这样做。但是,如果您不介意使用Python,这种数据重塑很简单。例如:

QueryRequest  existUserStoryRequest = new QueryRequest("HierarchicalRequirement");
existUserStoryRequest.setFetch(new Fetch("FormattedID","Name","Attachments"));
existUserStoryRequest.setQueryFilter(new QueryFilter("FormattedID", "=", existStoryFormattedID));
QueryResponse userStoryQueryResponse = restApi.query(existUserStoryRequest);
JsonObject existUserStoryJsonObject = userStoryQueryResponse.getResults().get(0).getAsJsonObject();
String existUserStoryRef = userStoryQueryResponse.getResults().get(0).getAsJsonObject().get("_ref").toString();
JsonArray attachmentsJsonArray = existUserStoryJsonObject.getAsJsonArray("Attachments");

import scipy, pandas df = pandas.DataFrame({ "s1_x": scipy.randn(10), "s1_y": scipy.randn(10), "s2_x": scipy.randn(10), "s2_y": scipy.randn(10) }) 最初的形状如下:

df

但如果你使用 s1_x s1_y s2_x s2_y 0 -0.075796 2.191362 -0.960267 0.619519 1 -1.201713 0.015710 0.121307 -0.273759 2 -0.549812 1.089105 -0.525985 1.383265 ,它就变成了:

df.stack()