首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个.csv文件中提取列并将它们合并为一个

从多个.csv文件中提取列并将它们合并为一个
EN

Stack Overflow用户
提问于 2017-07-17 10:00:25
回答 1查看 677关注 0票数 1

我有三个文件,我想从其中提取一些列并将它们粘贴到一个新文件中。这些文件不一定有相同的行数。它们在其第一列中对值进行排序。

文件1的结构如下:

代码语言:javascript
复制
col1;col2;col3;col4
SAMPLE-1;1;1;1
SAMPLE-2;1;1;1
SAMPLE-3;1;1;1
SAMPLE-4;1;1;1

此文件由";“而不是",”分隔。

文件2的结构如下:

代码语言:javascript
复制
col5,col6,col7,col8
SAMPLE-1_OTHER_INFO,2,2,2
SAMPLE-2_OTHER_INFO,2,2,2
SAMPLE-3_OTHER_INFO,2,2,2

文件3的结构如下:

代码语言:javascript
复制
col9,col10,col11,col12
SAMPLE-1_OTHER_INFO,3,3,3
SAMPLE-2_OTHER_INFO,3,3,3
SAMPLE-3_OTHER_INFO,3,3,3

输出文件(summary.csv)应该如下所示:

代码语言:javascript
复制
col1,col2,col4,col6,col7,col10,col12
SAMPLE-1,1,1,2,2,3,3
SAMPLE-2,1,1,2,2,3,3
SAMPLE-3,1,1,2,2,3,3
SAMPLE-4,1,1,,,,

基本上,所有三个文件的第一列都包含示例标识符。Col1的file1应该是输出文件的第一列。然后,col1中的标识符应该与col5和col9 of file2和file3中的标识符匹配。在进行比较时,不应考虑“_OTHER_INFO”部分。

如果匹配,应该添加文件2和3的col6、col7、col10和col12值的信息。

如果没有匹配,则该行仍应位于输出文件中,但最后四列应为空(如本例中的“Sam-4”)。

我计划使用awk或“剪切/粘贴”命令执行此操作。但是,我不知道如何在col1、col5和col9中的值之间寻找匹配。

EN

回答 1

Stack Overflow用户

发布于 2017-07-17 12:31:00

sort + sed技巧(用于排序输入文件):

代码语言:javascript
复制
join -t, -j1 -a1 -o1.1,1.2,1.4,2.2,2.3 <(tr ';' ',' < file1) <(sed 's/_[^,]*//g' file2) 
 | join -t, - -a1 -o1.1,1.2,1.3,1.4,1.5,2.2,2.4  <(sed 's/_[^,]*//g' file3)

产出:

代码语言:javascript
复制
SAMPLE-1,1,1,2,2,3,3
SAMPLE-2,1,1,2,2,3,3
SAMPLE-3,1,1,2,2,3,3
SAMPLE-4,1,1,,,,
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45141217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档