我有多个具有相同标题的CSV文件,我正在尝试将它们组合在一起,只保留一个标题。有什么想法吗?
答案 0 :(得分:10)
您可以使用MORE +1
输出除第1行以外的所有内容。
>new.csv (
type file1.csv
more +1 file2.csv
more +1 file3.csv
REM etc.
)
显然,您可以根据需要调整每个文件中要跳过的行数。
要合并当前文件夹中的所有csv文件: 编辑:修改为不使用新创建的输出csv作为输入
@echo off
setlocal
set first=1
>new.csv.tmp (
for %%F in (*.csv) do (
if defined first (
type "%%F"
set "first="
) else more +1 "%%F"
)
)
ren new.csv.tmp new.csv
显然,只有当所有csv文件共享相同的格式时,这才有效。
编辑2015-07-30: 存在一些限制:
答案 1 :(得分:6)
我遇到了dbenham用于组合当前文件夹中所有CSV文件的方法的问题。它偶尔会获取生成的CSV并将其包含在集合中。我修改了它以避免这个问题。
@echo off
setlocal
set first=1
set fileName="combinedFiles.csv"
>%fileName% (
for %%F in (*.csv) do (
if not "%%F"==%fileName% (
if defined first (
type "%%F"
set "first="
) else more +1 "%%F"
)
)
)
答案 2 :(得分:0)
这对我不起作用,因为我的文件具有> 200k行(从另一篇文章中读取,它适用于文件<64k行)。我将脚本修改为使用 sed 来打印行。
-n:安静,禁止自动打印所有行
1,$:第一行到最后一行
p:打印与模式匹配的行
@echo off
setlocal
set first=1
set fileName="combinedFiles.csv"
>%fileName% (
for %%F in (*.csv) do (
if not "%%F"==%fileName% (
if defined first (
sed -n 1,$p "%%F"
set "first="
) else sed -n 2,$p "%%F"
)
)
)
答案 3 :(得分:0)
1.) 将所有 CSV 文件复制到一个文件夹中。 2.) 在提示运行时:复制 *.csv combine.csv (为方便起见,制作一个批处理文件以运行) 3.) 从 Visual Studio 编译以下代码以制作 CombiCSV.exe
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string first_line, line;
ifstream myfile("combined.csv");
ofstream outfile("allcsv.csv"); // opens output.txt for writing
//if (myfile) // same as: if (myfile.good())
// {
getline(myfile, first_line); // get the first line of original
cout << first_line << endl;
outfile << first_line; // write first line to outfile
outfile << '\n'; //new line delimiter
while (getline(myfile, line)) // same as: while (getline( myfile, line ).good())
{
if (line != first_line) //check line whether equal to first line (header)
{
outfile << line; //if not just write to output
outfile << '\n'; //new line delimiter
cout << line << endl;
}
}
myfile.close();
outfile.close();
cout << "Copy End.\n";
//}
//else cout << "Failed\n";
return 0;
}
上述程序 CombiCSV.exe 将打开默认的“combined.csv”文件,保留第一行作为标题并在读取和写入记录期间删除重复项,直到 eof。结果存储在“allcsv.csv”