使用以下数据:
$cat date1.csv
Bob,2013-06-03T17:18:07
James,2013-06-03T17:18:07
Kevin,2013-06-03T17:18:07
$cat date2.csv
2012-12-02T18:30:31
2012-12-02T18:28:37
2013-06-01T12:16:05
如何合并date1.csv和date2.csv文件?所需输出:
$cat merge-date1-date2.csv
Bob,2013-06-03T17:18:07,2012-12-02T18:30:31
James,2013-06-03T17:18:07,2012-12-02T18:28:37
Kevin,2013-06-03T17:18:07,2013-06-01T12:16:05
请注意:最佳解决方案将能够快速管理大量线路。
答案 0 :(得分:45)
您正在使用paste(1)
:
$ paste -d , date1.csv date2.csv
Bob,2013-06-03T17:18:07,2012-12-02T18:30:31
James,2013-06-03T17:18:07,2012-12-02T18:28:37
Kevin,2013-06-03T17:18:07,2013-06-01T12:16:05
如果这些线上有前导空格,你的问题有点不清楚。如果你想在最终输出中删除它,你可以使用cut(1)
在粘贴之前剪掉它:
$ cut -c 2- date2.csv | paste -d , date1.csv -
Bob,2013-06-03T17:18:07,2012-12-02T18:30:31
James,2013-06-03T17:18:07,2012-12-02T18:28:37
Kevin,2013-06-03T17:18:07,2013-06-01T12:16:05
答案 1 :(得分:12)
另一种方法是使用pr
pr -mts, file1 file2
[jaypal:~/Temp] cat file1
Bob,2013-06-03T17:18:07
James,2013-06-03T17:18:07
Kevin,2013-06-03T17:18:07
[jaypal:~/Temp] cat file2
2012-12-02T18:30:31
2012-12-02T18:28:37
2013-06-01T12:16:05
[jaypal:~/Temp] pr -mts, file1 file2
Bob,2013-06-03T17:18:07,2012-12-02T18:30:31
James,2013-06-03T17:18:07,2012-12-02T18:28:37
Kevin,2013-06-03T17:18:07,2013-06-01T12:16:05
答案 2 :(得分:3)
我想扩展jaypal的解决方案,因为我在合并列之前遇到了编辑文件的需要。
$cat date1.csv
Bob,2013-06-03T17:18:07
James,2013-06-03T17:18:07
Kevin,2013-06-03T17:18:07
$cat date2.csv
2012-12-02T18:30:31
2012-12-02T18:28:37
2013-06-01T12:16:05
将date1.csv中的第1列与date2.csv中的第1列合并,可以按如下方式完成:
$pr -mts, <(cut -d, -f1 date1.csv) date2.csv
Bob,2012-12-02T18:30:31
James,2012-12-02T18:28:37
Kevin,2013-06-01T12:16:05
如果需要,您可以使用管道进行进一步编辑:
$pr -mts, <(cut -d, -f1 date1.csv | sort) date2.csv
无论如何,这对我来说很方便,只是想传递知识。希望它可以帮到某人。
答案 3 :(得分:1)
如果您只想并排粘贴不同文件的特定列, 您可以结合使用粘贴和剪切。
例如,如果您有三个具有相同行的文件,则仅在某些要合并在一起的列中有所不同:
<a>
文件的第一个for列相同。我们希望保留这些内容,但还要并排粘贴每个文件的第8列:
$ head file1.csv
chr1H 1 240 RLC 2 138 239 0.5774059
chr1H 641 1787 RLC 12 1135 1146 0.9904014
chr1H 2009 3436 RLC 15 1413 1427 0.9901892
chr1H 4935 6106 RLG 12 1060 1171 0.9052092
chr1H 11523 11997 RLG 4 371 474 0.7827004
chr1H 11998 12882 RLX 9 776 884 0.8778281
chr1H 20340 21529 RLC 13 1177 1189 0.9899075
chr1H 27889 36240 RLC 82 8118 8351 0.9720991
chr1H 36241 39978 RLC 36 3542 3737 0.9478191
chr1H 40384 41273 RLX 10 880 889 0.9898763
$ head file2.csv
chr1H 1 240 RLC 1 39 239 0.1631799
chr1H 641 1787 RLC 11 1049 1146 0.9153578
chr1H 2009 3436 RLC 6 594 1427 0.4162579
chr1H 4935 6106 RLG 11 995 1171 0.8497011
chr1H 11523 11997 RLG 3 275 474 0.5801688
chr1H 11998 12882 RLX 4 378 884 0.4276018
chr1H 20340 21529 RLC 11 979 1189 0.8233810
chr1H 27889 36240 RLC 74 7238 8351 0.8667225
chr1H 36241 39978 RLC 31 3047 3737 0.8153599
chr1H 40384 41273 RLX 10 880 889 0.9898763
$ head file3.csv
chr1H 1 240 RLC 2 138 239 0.5774059
chr1H 641 1787 RLC 12 1135 1146 0.9904014
chr1H 2009 3436 RLC 15 1413 1427 0.9901892
chr1H 4935 6106 RLG 12 1060 1171 0.9052092
chr1H 11523 11997 RLG 4 371 474 0.7827004
chr1H 11998 12882 RLX 9 776 884 0.8778281
chr1H 20340 21529 RLC 13 1177 1189 0.9899075
chr1H 27889 36240 RLC 82 8118 8351 0.9720991
chr1H 36241 39978 RLC 36 3542 3737 0.9478191
chr1H 40384 41273 RLX 10 880 889 0.9898763
结果:
$ paste file1.csv file2.csv file3.csv | cut -f 1,2,3,4,8,16,24 | head
这几乎不需要内存,并且可能和它一样快。