【问题标题】:concatenation of several csv filles using bash使用 bash 连接多个 csv 文件
【发布时间】:2021-02-09 23:04:57
【问题描述】:

我正在处理以下列格式给出的几个多行 csv 填充(包含相等数量的行并共享第一列)的串联:

test_1200
lig2: -4.6600
lig5: -6.8100
lig8: -5.1900
lig76: -5.5700
lig88: -5.8500
lig123: -6.0600
lig177: -0.1400
lig331: -8.0000
lig394: -4.3600
lig420: -5.5200
lig550: -4.3200
lig1000: -7.5800
lig1005: -7.5200
lig1011: -8.1500

为了合并几个 csv 填充,我的 bash 脚本中使用了以下命令:

# merge several csv filles located within same home directory
paste -d'\t' "${home}"/*.csv >> "${home}"/results_ALL.csv

该方法的问题是,在结果文件中,两个相间之间有一个未使用的选项卡,其中行号大于 lig1000(这是合并两个填充的示例):

       test_1200    test_7000
lig2: -4.6600   lig2: -5.7600
lig5: -6.8100   lig5: -5.9100
lig8: -5.1900   lig8: -5.1100
lig76: -5.5700  lig76: -5.0500
lig88: -5.8500  lig88: -4.7200
lig123: -6.0600 lig123: -6.2600
lig177: -0.1400 lig177: -0.7200
lig331: -8.0000 lig331: -9.3700
lig394: -4.3600 lig394: -4.7500
lig420: -5.5200 lig420: -4.4000
lig550: -4.3200 lig550: -4.9200
lig1000: -7.5800    lig1000: -5.3800
lig1005: -7.5200    lig1005: -6.7700
lig1011: -8.1500    lig1011: -6.6000
   

请注意,我想避免在最后 3 行之间有一个标签(在 lig1000 之后)。

此外,是否可以仅保留第一个 csv 文件中的第一列(包含行号,如 lig1)并删除其余部分(它们是同义的),但保留 CSV 中的索引生成的 fused 文件 (test_xxx)?

【问题讨论】:

  • 我认为 CSV 文件是严格的逗号分隔值文件?
  • 要摆脱常见的第一列,请考虑使用join;要将分隔文件格式转换为固定宽度格式文件,它会变得更有趣,因为它取决于您要加入的文件数量和每列中最宽的字段;如果@jared_mamrot 的column 答案不起作用,请考虑使用更多详细信息/示例数据更新问题
  • 您能否发布使用 join 作为答案的方法以便我检查它?
  • 没有额外的标签。 all 行的列之间只有 一个 选项卡。只是您正在使用每 4 列使用选项卡的编辑器查看文件。如果将其更改为普通的 8 列选项卡视图,它将正确排列。
  • 对不起,我只是把它当作普通的 txt 文件看,并没有注意到它。所以在 exel csv 中应该像普通的 4 列 csv(现在我的 mac 上没有它)?

标签: bash csv paste


【解决方案1】:

如果您希望列“对齐”,您可以尝试column,例如

paste -d'\t' "${home}"/*.csv | column -t -s$'\t' >> "${home}"/results_ALL.csv

【讨论】:

  • 谢谢,但它什么也没产生......这意味着没有区别。我将修改我的第一个主题以更好地解释这个问题
  • 啊!对不起!修复了答案中的错字
猜你喜欢
  • 2015-10-04
  • 2021-11-06
  • 2022-11-02
  • 2022-01-16
  • 1970-01-01
  • 2017-05-05
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多