有什么有效的方法可以从单个目录中的一百个 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”行之外的所有内容