我正在尝试将存储在CSV文件中的多个结果连接在一起,第一列作为索引。
问题是我有不同数量的文件,索引结果可能因文件而异,有些文件的结果较少。
在Linux中,最简单的方法是将进程编写脚本以将所有文件合并到一个文件中,空白字段用于空结果?我经历过Linux加入,粘贴和列没有运气。 Mybe我应该尝试使用其他工具,或者Python或Perl?
数据文件如下所示:
文件1:
header1 header2 header3
result_A 10 11 12
result_B 13 14 15
result_C 16 17 18
result_D 19 20 21
result_E 22 23 24
result_F 25 26 27
file2的:
header1 header2 header3
result_B 40 41 42
result_F 43 44 45
file3的:
header1 header2 header3
result_C 60 61 62
result_D 63 64 65
result_F 66 67 68
希望结果看起来像这样:
file1 file1 file1 file2 file2 file2 file3 file3 file3
header1 header2 header3 header1 header2 header3 header1 header2 header3
result_A 10 11 12
result_B 13 14 15 40 41 42
result_C 16 17 18 60 61 62
result_D 19 20 21 63 64 65
result_E 22 23 24
result_F 25 26 27 43 44 45 66 67 68
答案 0 :(得分:1)
UNIX join
应该会让你走得更远:
join -a 1 -e '0' "-t " -j 1
<(sort <(join -a 1 -e '0' "-t " -j 1 <(sort file1) <(sort file2)))
<(sort file3)
(全部在一条线上)。请注意,"-t "
的引号中的TAB字符。使用 ^ V <Tab>
输入。
如果您知道输入已排序,则最好使用
join -a 1 -e '0' "-t " -j 1
<(join -a 1 -e '0' "-t " -j 1 file1 file2)
file3
(全部在一行上)打印:
id header1 header2 header3 header1 header2 header3 header1 header2 header3
result_A 10 11 12
result_B 13 14 15 40 41 42
result_C 16 17 18 60 61 62
result_D 19 20 21 63 64 65
result_E 22 23 24
result_F 25 26 27 43 44 45 66 67 68
现在,正如您所看到的,在我的Cygwin系统上-e '0'
显然不像宣传的那样工作。我建议在不同的系统上尝试这个,因为我不认为在标准的UNIX实用程序中发现了这样一个重要的错误。
答案 1 :(得分:1)