macos - 在 Mac 终端中编辑然后合并大量 CSV
问题描述
我有一个包含 ~8400 个 CSV 文件的文件夹,这些文件很大:
- 2列
- ~17k 行
我厌倦了在终端中将所有内容与 cat 合并,并得到一个 3.2 GB 的 CSV 文件,当我尝试导入时,Excel 只是嘲笑它。所以我需要在合并它们之前把它们变小,这样我就可以开始处理 Excel 中的数据了。幸运的是,我只需要一小部分数据。
基本上,这是一个可以追溯到 2018 年 1 月的每小时时间序列(第一列是日期/时间),但我只需要过去 90 天的结束日期
- 提取每个 CSV (90*24) 的最后约 2160 行
- 我还需要一个分隔符来告诉我每个表在合并后从哪里开始,所以在提取最后约 2160 行之后,我想在每个表的开头插入一行,文件名不带扩展名。
- 删除除每天最后一条记录外的所有记录。
根据我的数学计算,这让我的行数不到 80 万行,Excel 应该能够打开这些行。
我在想 sed 可以做到这一切,然后 cat 合并新编辑的文件,但这超出了我的能力。非常感谢任何帮助。谢谢。
解决方案
这是一个非常简化的版本,您可以从中推断。
我的目录中有五个文件:
$ ls folder-with-files/
a b c d e
每个文件有五行。
$ cat folder-with-files/a
1
2
3
4
5
$ cat folder-with-files/b
10
11
12
13
14
15
等等
现在假设我想要每个文件的最后两行。那里的关键是tail
命令。在此之前,我将根据您的规范回显文件名。
$ for f in folder-with-files/*; do echo "FILE: " $f; tail -2 $f; done > big.csv
结果:
$ cat big.csv
FILE: folder-with-files/a
4
5
FILE: folder-with-files/b
14
15
FILE: folder-with-files/c
24
25
FILE: folder-with-files/d
34
35
FILE: folder-with-files/e
44
45