44

使用以下数据:

$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

请注意:最好的解决方案将能够快速管理大量线路。

4

4 回答 4

58

你在轨道上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
于 2013-06-04T04:56:58.303 回答
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
于 2013-06-04T05:18:04.250 回答
4

我想扩展 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

无论如何,这对我来说很方便,只是想传递知识。希望它可以帮助某人。

于 2013-11-25T16:49:16.200 回答
2

如果您只想并排粘贴不同文件的特定列,可以使用粘贴和剪切的组合。

例如,如果您有三个具有相同行的文件,仅在您想要合并的某些列上有所不同:

$ 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

文件的第一个列是相同的。我们想保留这些,但另外并排粘贴每个文件的第 8 列:

$ paste file1.csv file2.csv file3.csv | cut -f 1,2,3,4,8,16,24 | head

结果是:

chr1H   1   240 RLC 0.5774059   0.1631799   0.0000000
chr1H   641 1787    RLC 0.9904014   0.9153578   0.6448517
chr1H   2009    3436    RLC 0.9901892   0.4162579   0.2081289
chr1H   4935    6106    RLG 0.9052092   0.8497011   0.1690862
chr1H   11523   11997   RLG 0.7827004   0.5801688   0.0000000
chr1H   11998   12882   RLX 0.8778281   0.4276018   0.1119910
chr1H   20340   21529   RLC 0.9899075   0.8233810   0.1068124
chr1H   27889   36240   RLC 0.9720991   0.8667225   0.4043827
chr1H   36241   39978   RLC 0.9478191   0.8153599   0.3914905
chr1H   40384   41273   RLX 0.9898763   0.9898763   0.3217098

这几乎不需要内存,并且可能和它一样快。

于 2019-07-30T10:05:33.247 回答