IT story

텍스트 파일을 Windows 명령 줄과 연결하여 선행 줄 삭제

hot-time 2020. 7. 9. 07:57
반응형

텍스트 파일을 Windows 명령 줄과 연결하여 선행 줄 삭제


비교적 큰 텍스트 파일을 연결해야하며 명령 줄을 통해이 작업을 선호합니다. 불행히도 Windows 만 있고 새 소프트웨어를 설치할 수 없습니다.

type file1.txt file2.txt > out.txt

내가 원하는 것을 거의 얻을 수는 있지만 file2.txt의 첫 번째 줄이 out.txt에 포함되는 것을 원하지 않습니다.

나는 것으로 나타났습니다 more+n시작 라인을 지정하는 옵션을하지만, 내가 원하는 결과를 얻기 위해이 결합하는 것을 처리하지 않았다. 나는 이것이 Windows에서 가능하지 않을 수도 있다는 것을 알고 있으며, 줄을 없애기 위해 항상 수동으로 out.txt를 편집 할 수 있지만 명령 줄에서 간단한 방법이 있습니까?


more +2 file2.txt > temp
type temp file1.txt > out.txt

또는을 사용할 수 있습니다 copy. 자세한 내용 copy /?참조하십시오 .

copy /b temp+file1.txt  out.txt

나는 이것을 사용하고 그것은 나를 위해 잘 작동합니다 :

TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv

물론, 모든 달리기 전에, 당신은 DELETE C:\Folder\ConcatenatedFile.csv

유일한 문제는 모든 파일에 헤더가 있으면 모든 파일에서 반복된다는 것입니다.


사용 권장 사항에 대해 언급 할만한 평판이 충분하지 않지만 *.csv >> ConcatenatedFile.csv경고를 추가 할 수 있습니다.

ConcatenatedFile.csv연결에 사용중인 디렉토리와 동일한 디렉토리에 파일 을 작성하면 파일 자체에 추가됩니다.


FOR 명령을 사용하여 파일을 한 줄씩 에코하고 'skip'옵션을 사용하여 여러 줄을 놓치십시오 ...

FOR /F "skip=1" %i in (file2.txt) do @echo %i

다음과 같은 것을 포함하여 배치 파일의 출력을 리디렉션 할 수 있습니다 ...

FOR /F %%i in (file1.txt) do @echo %%i
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i

FOR 변수가 배치 파일 내에서 사용될 때 이중 %를 주목하십시오.


내 담당자가 너무 낮음을 제외하고 이것을 ghostdog74에 대한 의견에 넣을 것입니다.

more +2 file2.txt > temp
이 코드는 실제로 파일의 1 행과 2 행을 무시합니다. OP는 첫 번째 파일의 모든 행을 유지하고 (헤더 행을 유지하기 위해) 두 번째 파일에서 첫 번째 행 (아마도 동일한 헤더 행)을 제외 시키려고합니다 more +1. 따라서 OP 행만 제외해야합니다 .

type temp file1.txt > out.txt

이 코드에서 어떤 주문 결과가 나오는지 확실하지 않습니다. 가요 temp추가 file1.txt(필요에 따라), 또는 file1.txt추가 temp(헤더 행이 결과 파일의 중간에 매립되는 바와 같이 바람직하지 않은).

또한 이러한 작업에는 대용량 파일 (예 : 300MB)이 포함 된 매우 긴 시간이 걸립니다.


이를 수행하는 방법은 다음과 같습니다.

(type file1.txt && more +1 file2.txt) > out.txt

소프트웨어를 설치할 수 없다고 말했지만 그 제한이 얼마나 엄격한 지 잘 모르겠습니다. 어쨌든, 나는 같은 문제 (아마도 같은 헤더로 두 파일을 연결하려고 시도 중)를 가지고 있었고이 페이지에 도착한 다른 사람들에게 대안적인 답변을 줄 것이라고 생각했습니다.

Windows에서 많은 명령을 시도하고 심하게 좌절 한 후 큰 파일을 열 수 있다고 약속 한 모든 종류의 그래픽 편집기를 시도했지만 그 후에는 Linux 루트로 돌아와 Cygwin을 열었습니다. 신속한. 두 가지 명령 :

cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv

들어 file1.csv8백메가바이트 및 file2.csv400메가바이트,이 두 명령은 내 컴퓨터 5 초 미만했다. Cygwin 프롬프트에서 나는 Cygwin에서 Linux 명령이 느리다고 생각했지만 그 접근 방식은 훨씬 적은 노력이 들었고 내가 찾을 수있는 모든 Windows 접근 방식보다 훨씬 쉬웠습니다.


Powershell에서 :

Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt

당신은 또한 이것을 간단히 시도 할 수 있습니다

type file2.txt >> file1.txt

file1.txt의 끝에 file2.txt의 내용을 추가합니다.

원본 file1.txt가 필요한 경우 미리 백업하십시오. 아니면 당신은 이것을 할 수 있습니다

type file1.txt > out.txt
type file2.txt >> out.txt

첫 번째 파일 끝에서 줄 바꿈을하려면 추가하기 전에 다음 명령을 시도 할 수 있습니다.

type file1.txt > out.txt
printf "\n" >> out.txt
type file2.txt >> out.txt

에 대한 도움말은 copy와일드 카드를 사용하여 여러 파일을 하나로 연결할 수 있다고 설명합니다.

예를 들어, "abc"로 시작하는 현재 폴더의 모든 .txt 파일을 xyz.txt라는 단일 파일로 복사하려면 다음을 수행하십시오.

copy abc*.txt xyz.txt

more +2 file1.txt > type > out.txt && type file2.txt > out.txt

This takes Test.txt with headers and appends Test1.txt and Test2.txt and writes results to Testresult.txt file after stripping headers from second and third files respectively:

type C:\Test.txt > C:\Testresult.txt && more +1 C:\Test1.txt >> C:\Testresult.txt && more +1 C:\Test2.txt >> C:\Testresult.txt

참고URL : https://stackoverflow.com/questions/2477271/concatenate-text-files-with-windows-command-line-dropping-leading-lines

반응형