使用cmd添加csv列

时间:2017-12-04 07:53:25

标签: csv batch-file cmd

我有2个包含以下数据的CSV文件。我想使用.cmd批处理文件在新的CSV文件中添加第3和第4列。是否可以使用.cmd批处理文件。如果是,请帮我提供代码。

File1.csv

SL,Name,Score,Result
1,Saquib,10,100
2,Tanzil,10,100
3,Hasib,10,100
4,Sharek,10,100

File2.csv

SL,Name,Score,Result
1,Saquib,20,200
2,Tanzil,30,300
3,Hasib,40,400
4,Sharek,50,500

输出应如下所示。 Combine.csv

SL,Name,Score,Result
1,Saquib,30,300
2,Tanzil,40,400
3,Hasib,50,500
4,Sharek,60,600

我有一个代码,它结合了2个文件但不添加字段。

@echo off
ECHO Set working directory
pushd %~dp0`enter code here`
ECHO Deleting existing combined file
del combined.csv
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for %%i in (*.csv) do (
  if !cnt!==1 (
    for /f "delims=" %%j in ('type "%%i"') do echo %%j >> combined.csv
  ) else if %%i NEQ combined.csv (
    for /f "skip=1 delims=" %%j in ('type "%%i"') do echo %%j >> combined.csv
  )
  set /a cnt+=1

1 个答案:

答案 0 :(得分:0)

batch不是此类操作的脚本语言,使用PowerShell这样的语言会更快更容易。

示例假设两个文件的前两列是相同的

$table1 = import-csv file1.csv
$table2 = import-csv file2.csv

# convert Score Result columns to type int
$table1 |% { $_.Score = [int]$_.Score; $_.Result = [int]$_.Result }
$table2 |% { $_.Score = [int]$_.Score; $_.Result = [int]$_.Result }

# add score and result for each row respectively
for ($i=0;$i -lt $table1.count;$i++) {
    $table1[$i].Score  += $table2[$i].Score
    $table1[$i].Result += $table2[$i].Result
}

# export
$table1 | export-csv output.txt

或者,例如,如果第一列不相同则使用哈希表

$table1=import-csv file1.csv
$htable=@{}

foreach($r in $table1) {
    $r.Score = [int]$r.Score;
    $r.Result = [int]$r.Result;
    $htable[$r.SL] = $r;
}

$table2=import-csv file2.csv
foreach($r in $table2) { 
    $r.Score = [int]$r.Score + $htable[$r.SL].Score;
    $r.Result = [int]$r.Result + $htable[$r.SL].Result;
    $htable[$r.SL] = $r;
}

$htable.Values | export-csv output.txt