bash - Bash 命令对具有不同时间序列行的两个 csv 文件进行列合并
问题描述
我有两个包含时间序列数据的 csv 文件,我想使用 bash 对它们进行列合并。合并部分很简单paste -d , file1.csv file2.csv > combined.csv
,会生成一个包含额外列的合并文件。
问题是每个文件中的时间序列数据没有对齐,我希望能够处理这种情况。因此,合并的行由 A 列中的时间戳对齐。
这个SO Question中描述了同样的问题。但这与 R 编程语言有关,因此答案不适用于 bash。
# File 1 # File 2
| Time | Datapoint | | Time | Datapoint |
| 2021-04-01T00:00:00Z | 43 | | 2021-04-01T00:00:05Z | 51 |
| 2021-04-01T00:00:01Z | 44 | | 2021-04-01T00:00:10Z | 52 |
| 2021-04-01T00:00:02Z | 45 | | 2021-04-01T00:00:15Z | 53 |
| 2021-04-01T00:00:03Z | 46 | | 2021-04-01T00:00:20Z | 54 |
| 2021-04-01T00:00:04Z | 47 | | 2021-04-01T00:00:25Z | 55 |
| 2021-04-01T00:00:05Z | 48 | | 2021-04-01T00:00:30Z | 56 |
| 2021-04-01T00:00:06Z | 49 | | 2021-04-01T00:00:35Z | 57 |
# Desired File
| Time | Datapoint | Datapoint |
| 2021-04-01T00:00:00Z | 43 | |
| 2021-04-01T00:00:01Z | 44 | |
| 2021-04-01T00:00:02Z | 45 | |
| 2021-04-01T00:00:03Z | 46 | |
| 2021-04-01T00:00:04Z | 47 | |
| 2021-04-01T00:00:05Z | 48 | 51 |
| 2021-04-01T00:00:06Z | 49 | |
我知道我可以编写一个脚本来读取这两个文件,并分别写入与每个时间戳相关的数据。但我想知道是否有另一种使用 bash 实用程序的方法?
解决方案
使用join
. 这需要对文件进行排序,但从外观上看,您的文件已经排序。
join --header -t, -j1 -a1 file1 file2
印刷
Time ,Datapoint,Datapoint
2021-04-01T00:00:00Z,43
2021-04-01T00:00:01Z,44
2021-04-01T00:00:02Z,45
2021-04-01T00:00:03Z,46
2021-04-01T00:00:04Z,47
2021-04-01T00:00:05Z,48 ,51
2021-04-01T00:00:06Z,49
推荐阅读
- azure - 如何构建代表 Azure 数据湖(第 2 代)的 Docker 映像?
- javascript - 余数运算符给出奇怪的结果
- typescript - 如何避免在 TypeScript 中使用对象属性的名称和 this 关键字?
- firebase - 如何仅对付费用户限制 Firebase 存储文件?
- azure - 部署到 Azure 时,Core 2.2 上的 SignalR 失败
- ruby-on-rails - “[方法] []的未定义方法错误:Rails中的数组
- scala - Getting error while trying to add a java date as literal in spark dataFrame
- python - 在python中用类定义变量时如何使用self
- android - 设置 LineRenderer 位置
- sql - PL/SQL: ORA-01744: inappropriate INTO