Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Разбить файл (столбцы) на 3 файла (больше 100000 строк) (http://forum.oszone.net/showthread.php?t=350965)

paulomyaulo 31-03-2022 14:45 2982505

Разбить файл (столбцы) на 3 файла (больше 100000 строк)
 
Добрый день! Всем привет
Довольно долго искал, но все таки не нашел, что нужно, и сам не дотумкал как сделать красиво.
Есть текстовой файл, такого типа, 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 2982512

В другом чатике подсказали, вот такой способ.
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 2982513

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 2982515

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 2982533

Цитата:

Цитата DJ Mogarych
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 2982573

Код:

New-Item D:\temp\rrr\ddd\jjj\fff\1.txt -Force


Время: 00:54.

Время: 00:54.
© OSzone.net 2001-