【问题标题】:Linux bash: Combine two csv files with different headers [duplicate]Linux bash:组合两个具有不同标题的csv文件[重复]
【发布时间】:2013-03-25 14:54:46
【问题描述】:

我有这两个文件

第一:

a;b;c;d
1;2;3;4

第二:

d;e;f;g
4;5;6;7

我需要这个结果:

a;b;c;d;e;f;g
1;2;3;4;;;
;;;4;5;6;7

在 Linux 中有没有什么捷径可以做到这一点?

编辑:每个 csv 文件的标题/列可以更改,并且可以包含重复的列。

编辑 2:Hmpf。链接的问题是完全不同的场景,没有回答我的问题。

【问题讨论】:

  • 合并的标准是什么?其他文件的标题是否所有行都有空列?
  • @MarcB 不是。似乎添加了空值。
  • @Olaf 我不会称之为合并。我需要连接两个 csv 文件,“合并”标题并用空值填充新列
  • @gongzhitaao:阅读手册页进行粘贴。有一个分隔符选项,因此您可以告诉它使用制表符以外的其他内容,例如;.
  • 我建议在 Python 或 Perl 中快速执行此操作。大约有十行 Python;如果您使用 Python 的 pandas 库,则为三行;我不知道 Perl,但我希望大小相同。

标签: linux bash csv


【解决方案1】:

您可以加入标题列,然后调整剩余的行

head1=`head -1 file1.txt`
head2=`head -1 file2.txt`
echo "$head1;$head2"
sed -e 1d -e 's/$/;;;/' file1.txt
sed -e 1d -e 's/^/;;;/' file2.txt

【讨论】:

  • 谢谢。我已经编辑了我的问题。问题是,标题可以更改并且可以包含重复的列。
  • @Torben 如果公共列不在开头/结尾,而是介于两者之间,会发生什么情况,例如a;b;c;de;c;f;g?
  • 这可能发生,是的。希望有一种简短的方法可以在 bash 脚本中执行此操作。
  • @Torben 好吧,当然可以,但时间不短。至少不是,我能想出什么。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 2021-06-15
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多