从一百个 zip 文件中提取 *.csv 并附加结果

从一百个 zip 文件中提取 *.csv 并附加结果

有什么有效的方法可以从单个目录中的一百个 zip 文件中提取所有 *.csv 文件(而不是其中的其他文件)?然后,我需要制作一个大文件,将每个 CVS 文件附加在一起,尽管从文件 2、...、n 中删除了标题行 1。

如果效果良好,我想使用 7-Zip 的 7za.exe 命令行版本或其他自包含且不需要在 WinXP 平台上安装的解决方案。zip 文件包含我不需要的其他数据。

使用 file1+file2+... 进行简单的附加很容易,但如何删除标题呢?

答案1

实际上,要跳过 Unix/Linux 中的标题,您需要“tail”命令。

您可以通过执行以下操作让“tail”命令跳过第一行(标题):

tail -n+2 filename

这将告诉 tail 从第 2 行开始读取。

要执行此操作全部.csv 文件在您的当前目录中,并将它们附加在一起,将以下内容放入脚本中:

#!/bin/bash

for file in *.csv
do
tail -n+2 $file
done

然后您可以像 ./script.sh>output 一样运行该脚本,输出将在名为“output”的文件中。

不幸的是,我不知道在没有端口的 Windows 上是否有类似 tail 的东西可用。

答案2

令我尴尬的是,使用 7Zip 从目录中的所有压缩文件中提取特定文件类型的答案很简单:

7za.exe e *.zip *.csv

然后将文件与批处理文件合并(虽然令人失望的是这一行不能在命令提示符中输入)

[saved as foo.bat for example]
for %%X in (*.csv) do tail -n+2 %%X >> combined.csv

答案3

但是删除标题怎么样?

使用 unix 的“head”命令(来自 mingw、opench 或其他一些实用程序),您可以使用“head -n”显示除前“n”行之外的所有内容

相关内容