在Mac终端上编辑并合并大量的CSV。

问题描述 投票:0回答:1

我有一个约8400个CSV文件的文件夹,很大。

  • 2列
  • ~17 000行

我累了就在终端用cat合并,得到了一个3.2GB的CSV文件,当我想导入时,Excel就笑了。所以我需要在合并之前把这些数据变小,这样我就可以开始在Excel中搞数据了。幸运的是,我只需要一小部分数据的子集。

基本上,这是一个每小时的时间序列,可以追溯到2018年1月(第一列是datetime),但我只需要过去90天的日终数。

  • 提取每个CSV的最后约2160行(90*24)
  • 我还需要一个定界符来显示合并后每个表的开始位置,所以在提取了最后约2160行后,我想在每个表的开头插入一行,文件名不加扩展。
  • 除了每一天的最后一条记录外,其他的全部删除。

根据我的计算,这让我有不到80万行,Excel应该可以打开。

我想sed可以做到这一切,然后用cat来合并新编辑的文件,但这超出了我的能力范围。任何帮助非常感激。谢谢。

macos csv sed terminal cat
1个回答
0
投票

这是一个极其简化的版本,你可以从这里推断。

我的目录里有五个文件。

$ 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
© www.soinside.com 2019 - 2024. All rights reserved.