창에서 큰 텍스트 파일을 분할하는 방법은 무엇입니까?
저는 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줄의 작은 파일로 분할합니다.
- /pattern 을 정규패문/턴생성으로 합니다.
set
에 공급할 입니다./g
의findstr
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]\]
- 파일을 더 작은 파일로 분할합니다.
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
- 각 파일 분할에 대해 접두사가 붙은 줄 번호를 제거합니다.
첫 파일의 : 예첫: 째번파일경우의경:
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
'programing' 카테고리의 다른 글
Xcode 8.3.3 "iTunes Connect 액세스 권한이 있는 계정 없음" (0) | 2023.05.06 |
---|---|
WPF 앱 내에서 특정 디렉터리로 Windows 탐색기를 여는 방법은 무엇입니까? (0) | 2023.05.06 |
특정 인덱스에서 문자 바꾸기 (0) | 2023.05.06 |
현재 소프트웨어 업데이트 서버에서 Xcode를 사용할 수 없습니다. (0) | 2023.05.06 |
AWS EC2 인스턴스에 Python 3을 설치하려면 어떻게 해야 합니까? (0) | 2023.05.06 |