programing

창에서 큰 텍스트 파일을 분할하는 방법은 무엇입니까?

i4 2023. 5. 6. 14:03
반응형

창에서 큰 텍스트 파일을 분할하는 방법은 무엇입니까?

저는 2.5GB 크기의 로그 파일을 가지고 있습니다.Windows 명령 프롬프트를 사용하여 이 파일을 더 작은 파일로 분할할 수 있는 방법이 있습니까?

Git for Windows를 설치한 경우 Git와 함께 제공되므로 Git Bash를 설치해야 합니다.

Git Bash에서 다음 명령을 사용하여 파일을 분할합니다.

  • 각각 500MB 크기의 파일로:

  • 각각 10000줄의 파일로:

팁:

  • Git/Git Bash가 없는 경우 https://git-scm.com/download 에서 다운로드하십시오.

  • Git Bash 바로 가기를 분실한 경우 다음을 사용하여 실행할 수 있습니다.

바로 그거야!


저는 항상 예를 좋아합니다.

예:

여기에 이미지 설명 입력

이 이미지에서 에 의해 생성된 파일의 이름을 확인할 수 있습니다.xaa,xab,xac,기타.

이러한 이름은 사용자가 지정할 수 있는 접두사와 접미사로 구성됩니다.접두사 또는 접미사의 모양을 지정하지 않았기 때문에 접두사가 다음과 같이 기본 설정되었습니다.x접미사는 기본적으로 두 문자로 된 알파벳 열거형입니다.

다른 예:

이 예는 다음을 보여줍니다.

  • 파일 이름 접두사 사용MySlice(기본값 대신)x),
  • -d숫자 접미사를 사용하기 위한 플래그(대신)aa,ab,ac기타...),
  • 그리고 옵션-a 5접미사의 길이를 5자리로 하고 싶습니다.

여기에 이미지 설명 입력

아래 코드 분할 파일(매 500)

@echo off
setlocal ENABLEDELAYEDEXPANSION
REM Edit this value to change the name of the file that needs splitting. Include the extension.
SET BFN=upload.txt
REM Edit this value to change the number of lines per file.
SET LPF=15000
REM Edit this value to change the name of each short file. It will be followed by a number indicating where it is in the list.
SET SFN=SplitFile

REM Do not change beyond this line.

SET SFX=%BFN:~-3%

SET /A LineNum=0
SET /A FileNum=1

For /F "delims==" %%l in (%BFN%) Do (
SET /A LineNum+=1

echo %%l >> %SFN%!FileNum!.%SFX%

if !LineNum! EQU !LPF! (
SET /A LineNum=0
SET /A FileNum+=1
)

)
endlocal
Pause

아래를 참조하십시오. https://forums.techguy.org/threads/solved-split-a-100000-line-csv-into-5000-line-csv-files-with-dos-batch.1023949/

Set Arg = WScript.Arguments
set WshShell = createObject("Wscript.Shell")
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
    Set rs = CreateObject("ADODB.Recordset")
    With rs
        .Fields.Append "LineNumber", 4 

        .Fields.Append "Txt", 201, 5000 
        .Open
        LineCount = 0
        Do Until Inp.AtEndOfStream
            LineCount = LineCount + 1
            .AddNew
            .Fields("LineNumber").value = LineCount
            .Fields("Txt").value = Inp.readline
            .UpDate
        Loop

        .Sort = "LineNumber ASC"

        If LCase(Arg(1)) = "t" then
            If LCase(Arg(2)) = "i" then
                .filter = "LineNumber < " & LCase(Arg(3)) + 1
            ElseIf LCase(Arg(2)) = "x" then
                .filter = "LineNumber > " & LCase(Arg(3))
            End If
        ElseIf LCase(Arg(1)) = "b" then
            If LCase(Arg(2)) = "i" then
                .filter = "LineNumber > " & LineCount - LCase(Arg(3))
            ElseIf LCase(Arg(2)) = "x" then
                .filter = "LineNumber < " & LineCount - LCase(Arg(3)) + 1
            End If
        End If

        Do While not .EOF
            Outp.writeline .Fields("Txt").Value

            .MoveNext
        Loop
    End With

인하.

filter cut {t|b} {i|x} NumOfLines

파일의 맨 위 또는 맨 아래에서 줄 수를 줄입니다.

t - top of the file
b - bottom of the file
i - include n lines
x - exclude n lines

cscript /nologo filter.vbs cut t i 5 < "%systemroot%\win.ini"

다른 방법 이 출력 라인 5001+는 사용자에 맞게 조정합니다.메모리를 거의 사용하지 않습니다.

Do Until Inp.AtEndOfStream
         Count = Count + 1
         If count > 5000 then
            OutP.WriteLine Inp.Readline
         End If
Loop

물론 있지요!WinCMD는 단순히 텍스트 파일을 분할하는 것 이상의 많은 작업을 수행할 수 있습니다. :)

텍스트 파일을 각각 '최대' 줄로 된 별도의 파일로 분할합니다.

Split text file (max lines each):
: Initialize
set input=file.txt
set max=10000

set /a line=1 >nul
set /a file=1 >nul
set out=!file!_%input%
set /a max+=1 >nul

echo Number of lines in %input%:
find /c /v "" < %input%

: Split file
for /f "tokens=* delims=[" %i in ('type "%input%" ^| find /v /n ""') do (

if !line!==%max% (
set /a line=1 >nul
set /a file+=1 >nul
set out=!file!_%input%
echo Writing file: !out!
)

REM Write next file
set a=%i
set a=!a:*]=]!
echo:!a:~1!>>out!
set /a line+=1 >nul
)

위의 코드가 중단되거나 충돌하는 경우 이 예제 코드는 파일을 더 빠르게 분할합니다(모든 것을 메모리에 보관하는 대신 중간 파일에 데이터를 기록함).

예: 7,600줄의 파일을 최대 3000줄의 작은 파일로 분할합니다.

  1. /pattern 을 정규패문/턴생성으로 합니다.set에 공급할 입니다./gfindstr

list1.txt

\[[0-9]\]
\[[0-9][0-9]\]
\[[0-9][0-9][0-9]\]
\[[0-2][0-9][0-9][0-9]\]

list2.txt

\[[3-5][0-9][0-9][0-9]\]

list3.txt

\[[6-9][0-9][0-9][0-9]\]

  1. 파일을 더 작은 파일로 분할합니다.
type "%input%" | find /v /n "" | findstr /b /r /g:list1.txt > file1.txt
type "%input%" | find /v /n "" | findstr /b /r /g:list2.txt > file2.txt
type "%input%" | find /v /n "" | findstr /b /r /g:list3.txt > file3.txt
  1. 각 파일 분할에 대해 접두사가 붙은 줄 번호를 제거합니다.
    첫 파일의 : 예첫: 째번파일경우의경:
for /f "tokens=* delims=[" %i in ('type "%cd%\file1.txt"') do (
set a=%i
set a=!a:*]=]!
echo:!a:~1!>>file_1.txt)

사항
선행 공백, 빈 줄 및 공백 줄과 함께 사용할 수 있습니다.

Windows 10 x 64 CMD, 4.4에서 테스트됨GB 텍스트 파일, 5651982 줄.

Git Bash가 설치되어 있어야 하며 터미널/쉘 내부에서 작업해야 합니다.

이 태스크에 대해 명령 분할을 사용할 수 있습니다.예를 들어, 이 명령은 명령 프롬프트에 입력됩니다.

split YourLogFile.txt -b 500m

에서는 각각 500MB 크기의 파일을 여러 개 생성합니다.크기가 큰 파일은 몇 분 정도 걸립니다.출력 파일(기본적으로 "xaa", "xab" 등)의 이름을 *.txt로 변경하여 원하는 편집기에서 열 수 있습니다.

명령에 대한 도움말 파일을 확인하십시오.로그 파일을 줄 수로 나누거나 출력 파일의 이름을 변경할 수도 있습니다.

에 테스트된.

  • Windows 7 64비트
  • 윈도우 10 64비트

언급URL : https://stackoverflow.com/questions/31786287/how-to-split-large-text-file-in-windows

반응형