如何将csv拆分成折叠?我有一个csv说有10行。我想将它分成5组,每组有2个文件。第一个文件有2行。剩下8的第二个文件。
下一组将有3,3和4,4合1文件,并保留在另一个文件中,依此类推
id1,id2
1,1
2,2
3,3
4,4
5,5
6,6
7,7
8,8
9,9
10,10
我想要的输出:
Set-1-A
1,1
2,2
Set-1-B
3,3
4,4
5,5
6,6
7,7
8,8
9,9
10,10
Set-2-A
3,3
4,4
Set-2-B
1,1
2,2
5,5
6,6
7,7
8,8
9,9
10,10
依旧......
答案 0 :(得分:1)
您可以使用嵌套循环从csv中抓取n
项并导出到新文件:
$Data = Import-Csv .\input.csv
$n = 2
$SliceCount = 1
while($Data)
{
$Slice = @()
for($i = 0; $i -lt $n; $i++){
# shift rows from the input array, one by one
$Piece,$Data = $Data
$Slice += $Piece
}
# export each slice to a new csv file
$Slice | Export-Csv -Path (Join-Path $PWD "output_$($SliceCount).csv") -NoTypeInformation
$SliceCount++
}
答案 1 :(得分:1)
编辑:代码已修改为对评论的回复
@echo off
setlocal EnableDelayedExpansion
for /F %%a in ('find /C /V "" ^< input.txt') do set "lines=%%a"
set /P "sets=There are %lines% lines, enter number of sets: "
set /A linesPerSet=lines/sets
del set*-?.csv 2> NUL
rem Initialize the indicators of all sets
for /L %%s in (1,1,%sets%) do set "set[%%s]=1"
rem Activate the first set
set "set=1"
set "set[1]=0"
set "line=0"
for /F "delims=" %%a in (input.txt) do (
rem Check all sets and distribute the lines accordingly
for /L %%s in (1,1,%sets%) do if !set[%%s]! equ 0 (
rem Output this line to first file of this set
>> set%%s-A.csv echo %%a
) else (
rem Output this line to second file of this set
>> set%%s-B.csv echo %%a
)
rem Check if the first file of the set must change
set /A line+=1, lineMODlinesPerSet=line%%linesPerSet
if !lineMODlinesPerSet! equ 0 (
rem Change the first file of set
set /A set+=1
for /L %%s in (1,1,!sets!) do set /A set[%%s]=set-%%s
)
)
输出:
C:\> test.bat
There are 10 lines, enter number of sets: 5
C:\> type set*.csv
set1-A.csv
1,1
2,2
set1-B.csv
3,3
4,4
5,5
6,6
7,7
8,8
9,9
10,10
set2-A.csv
3,3
4,4
set2-B.csv
1,1
2,2
5,5
6,6
7,7
8,8
9,9
10,10
set3-A.csv
5,5
6,6
set3-B.csv
1,1
2,2
3,3
4,4
7,7
8,8
9,9
10,10
set4-A.csv
7,7
8,8
set4-B.csv
1,1
2,2
3,3
4,4
5,5
6,6
9,9
10,10
set5-A.csv
9,9
10,10
set5-B.csv
1,1
2,2
3,3
4,4
5,5
6,6
7,7
8,8