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


127

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

type file1.txt file2.txt > out.txt

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

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

답변:


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

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

copy /b temp+file1.txt  out.txt

4
물론이야! 나는 임시 파일의 사용을 피하기를 원했을 것입니다. 괄호, 파이프 및 <를 사용하여 하나의 명령으로 가져 오려고했지만 아무데도 갈 수 없었습니다. 이 copy명령은 훨씬 빠르지 만 끝에 SUB 문자를 넣습니다. 이것을 피할 수있는 방법이 있습니까?
James

18
모든 파일을 연결 copy /b *.txt combined.txt하려면 파일을 개별적으로 나열 하지 않고도 할 수 있다고 덧붙입니다.
Phlucious

1
더 많이 탭을 공백, 동정으로 변환합니다!
안토니오

병합 된 파일에서 원본 파일을 검색하는 명령이 있습니까?
swapnil 간디

3
@ ghostdog74 : type file1.txt temp > out.txt첫 번째 파일에 헤더없이 실제로 두 번째 파일을 추가 해야한다고 생각합니다.
Marius

61

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

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

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

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


2
연결된 파일의 파일 이름을 입력하면 파일의 끝 부분에 알파벳 순서로 나열되어 있음을 의미하므로 창은 두 번 연결된 것 같습니다! 문제가 없도록 파일 이름 1filename.csv를 사용했습니다. 다른 폴더에
연결해

1
>> 대신>를 사용하면 파일을 미리 삭제할 필요가 없습니다. > 출력을 리디렉션하고 매번 파일을 새로 만듭니다. >> 출력 및 추가를 리디렉션합니다.
Eddie Deyo

1
이것은 OP가 요청한 file2의 첫 번째 줄을 어떻게 건너 뛰나요?
Dan Dascalescu

1
file2의 첫 번째 줄을 건너 뛰지 않습니다. 나는 그 질문의 일부를 놓쳤다.
Raj 더 많은

1
병합 된 파일에서 원본 파일을 검색하는 명령이 있습니까?
swapnil 간디

21

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

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


2
이것은 OP가 요청한 file2의 첫 번째 줄을 어떻게 건너 뛰나요?
Dan Dascalescu

6

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 변수가 배치 파일 내에서 사용될 때 이중 %를 주목하십시오.


4

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

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

3

내 담당자가 너무 낮음을 제외하고 이것을 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)이 포함 된 매우 긴 시간이 걸립니다.


2

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

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

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

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


1

powershell에서 :

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

0

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

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

0

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

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

copy abc*.txt xyz.txt

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

-1

이 얻어 Test.txt헤더와 추가 Test1.txt하고 Test2.txt하고 결과를 기록 Testresult.txt각각 두 번째 및 세 번째의 파일로부터 헤더를 스트리핑 후 파일 :

type C:\Test.txt > C:\Testresult.txt && more +1 C:\Test1.txt >> C:\Testresult.txt && more +1 C:\Test2.txt >> C:\Testresult.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.