Войти

Показать полную графическую версию : Разбить файл (столбцы) на 3 файла (больше 100000 строк)


paulomyaulo
31-03-2022, 14:45
Добрый день! Всем привет
Довольно долго искал, но все таки не нашел, что нужно, и сам не дотумкал как сделать красиво.
Есть текстовой файл, такого типа, 100 000 строк и более, разделены запятыми.
Нужно, чтобы каждый столбец оказался в отдельном файле (естественно без запятых). Я нашел прогу csv сплиттер, но она делит по строкам)))

780558633,54537525,288302340878
787960363,50901274,288300919910
604657003,72563209,261370625223
188604993,71649010,226307046040
897750293,41710968,292302487462
182028204,82116863,291305433774
881659655,36183815,291302833466
183923996,2487409,223300805238
185262987,810706,261360303267
781004248,70868973,288304241383
197473909,36217102,226303620030
788146790,51256534,288301081029
876505493,44654881,234363471421

cat file.csv | %{ $_.split(',')[2] } > new-file

нашел вот такое, но там только 1 столбец откусывается)

paulomyaulo
31-03-2022, 16:58
В другом чатике подсказали, вот такой способ.
convertfrom-csv -delimiter ',' -inputobject (get-content -path file.txt) -header '1','2','3' | foreach-object {
Add-content -value $_.1 -path 1.txt -force
Add-content -value $_.2 -path 2.txt -force
Add-content -value $_.3 -path 3.txt -force}

megaloman
31-03-2022, 17:27
paulomyaulo, я попробовал CMD, убедился, что при большом числе строк CMD делает очень долго. Вот .vbs -скрипт. Тестировал на 200000 строкахFileIn = "Z:\Box_In\allcolumns200000.txt"
'FileIn = "Z:\Box_In\allcolumns.txt"

FileOut1 = "Z:\Box_In\allcolumns_split1.txt"
FileOut2 = "Z:\Box_In\allcolumns_split2.txt"
FileOut3 = "Z:\Box_In\allcolumns_split3.txt"

Timing = vbCrLf + vbCrLf + CStr(Now)
With CreateObject("Scripting.FileSystemObject")
On Error Resume Next

Set FIn = .OpenTextFile(FileIn, 1, False)

If Err.Number <> 0 Then
MsgBox "File " + FileIn + vbCrLf + Err.Description + " (" + CStr(Err.Number) + ")", 16
WScript.Quit 2
End If
On Error GoTo 0

Set FOut0 = .OpenTextFile(FileOut1, 2, True)
Set FOut1 = .OpenTextFile(FileOut2, 2, True)
Set FOut2 = .OpenTextFile(FileOut3, 2, True)

Do While Not FIn.AtEndOfStream
S = FIn.ReadLine
SS = Split(S, ",")
FOut0.WriteLine SS(0)
FOut1.WriteLine SS(1)
FOut2.WriteLine SS(2)
Loop

FIn.Close
FOut0.Close
FOut1.Close
FOut2.Close
End With
MsgBox "Готово" + Timing + vbCrLf + CStr(Now), 64

DJ Mogarych
31-03-2022, 17:54
Powershell

$csv = import-csv "D:\temp\tt.txt" -Header "1","2","3"

$csv.1 > "D:\temp\1.txt"
$csv.2 > "D:\temp\2.txt"
$csv.3 > "D:\temp\3.txt"

paulomyaulo
01-04-2022, 09:24
sv.1 > "D:\temp\1.txt"
$csv.2 > "D:\temp\2.txt"
$csv.3 > "D:\temp\3.txt" »

Все супер! спасибо! а может подскажете, чтобы он ещё путь создавал указанный, или конечную папку?

DJ Mogarych
01-04-2022, 19:13
New-Item D:\temp\rrr\ddd\jjj\fff\1.txt -Force




© OSzone.net 2001-2012