반응형
복수의 csv나 txt 파일을 결합하고 싶다
로그 데이터나 트랜잭션 데이터 등의 데이터를 결합하여 하나의 파일로 만들고 싶을 때가 올 수 있습니다.
결합할 파일이 몇 파일이면 수작업으로 복사해도 큰 어려움이 없을 것입니다.
그러나 결합 대상 파일이 수십 수백 개와 맞는 경우라면 어떨까요?결합하는 파일이 방대하면 수작업으로는 매우 효율적이지 않고 자동화의 필요성도 나옵니다.
그래서 이번 시간에는 csv·txt 파일을 일괄적으로 결합하는 방법을 해설해 보겠습니다.
복수의 csv나 txt 파일을 결합하는 방법
여러 csv·txt를 결합하는 방법은 여러 가지가 있기 때문에 각각 순서대로 해설하겠습니다.
배치 파일을 사용하다
배치 파일이란 명령 프롬프트에서 실행할 수 있는 명령을 기술한 파일을 말합니다.배치 파일에 여러 명령어를 작성해 두면 처리 자동화를 할 수 있는 것입니다.
배치 파일은 들어본 적이 없거나 사용한 적이 없다고 하는 분이 많을지도 모릅니다만, 카피 페이스트로 할 수 있기 때문에, 지식이 전혀 없어도 괜찮습니다.
먼저 csv의 결합을 해설하겠습니다.
일단은 어디든 좋으니까 빈 폴더를 만드세요.
작성하면 그 안에 결합하고자 하는 csv 파일을 복사하여 저장합니다.
같은 폴더에 ′marge.bat′이라는 파일을 작성해 주세요.
작성한 marge.bat을 텍스트 에디터로 열고 아래 텍스트를 적어 저장합니다.
copy *.csv __result.csv
저장하면 텍스트 편집기를 닫아도 문제 없습니다.
그런 다음 merge.bat을 더블 클릭하여 실행하십시오.
실행한다고 해서 어떤 창이 뜨지는 않지만 잠시 후 같은 폴더에 _result.csv가 생성되어 있을 것입니다.
이 _result.csv가 동일 폴더 내에 있는 모든 csv 파일이 결합된 파일입니다.시험삼아 텍스트 에디터나 엑셀 등으로 열어보세요.
확실히 하나의 파일로 정리할 수 있을 것입니다.
txt 파일의 경우는?
텍스트 파일의 경우는, merge.bat의 내용을 이하의 것으로 고쳐 써 주세요.
copy *.txt __result.txt
이 명령어를 저장한 배치 파일을 실행하면 동일 폴더 내의 txt 파일이 모두 결합된 __result.txt가 생성됩니다.
명령 프롬프트로 결합하다
명령 프롬프트에서 여러 파일을 결합할 수도 있습니다.
먼저 작업 표시줄의 검색 상자에서 명령 프롬프트를 검색, 부팅합니다.
부팅 후 명령 프롬프트에서 열려 있는 폴더(커런트 디렉토리)를 변경해야 합니다.
결합하고 싶은 파일이 있는 폴더를 탐색기에서 열어두세요.
그런 다음 폴더의 빵 부스러기 목록을 클릭하여 폴더 경로를 복사합니다.
복사하면 명령 프롬프트에서 ′cd′를 입력하고 아까 복사한 폴더 경로를 붙여 엔터키를 누릅니다.
이때붙이는명령은Ctrl+V가아니라우클릭이기때문에틀리지않도록하세요.
무사히 열려 있는 폴더(커런트 디렉토리)를 변경할 수 있으면 명령어 입력란의 텍스트가 아까 입력한 폴더 경로로 바뀌어 있습니다.
이제 csv 파일이 있는 폴더에 명령 프롬프트로 접근할 수 있는 상태입니다.
이 상태에서 csv 파일을 결합 그 이하의 명령어를 입력하고 엔터키를 눌러 보십시오.
copy *.csv __result.csv
결합에 성공하면 이런 메시지가 뜨니 익스플로러 쪽에서 파일을 확인해 보세요.
명령 프롬프트를 사용하는 경우에는 이 방법으로 결합할 수 있습니다.하지만 미리 명령어를 입력해 둔 배치 파일을 사용하는 것이 간단하기 때문에 기억해 두면 좋을 것입니다.
Windows PowerShell로 결합하기
Windows 10에서는 명령 프롬프트가 아닌 Windows PowerShell이 표준 명령줄 인터페이스로 되어 있습니다.
Windows PowerShell은 작업 표시줄에서가 아니라 탐색기에서 부팅할 수 있습니다.
그 관계로 Windows PowerShell을 기동할 때 열려 있던 폴더가 커런트 디렉토리가 되어 cd 명령을 사용하여 폴더를 이동할 필요가 없습니다.
명령 조작 초보자라면 명령 프롬프트보다 Windows Power Shell이 더 다루기 쉬울 것입니다.
PoweShell의 기동은 익스플로러 왼쪽 상단의 「파일」에서 실시할 수 있습니다.
열려 있던 폴더가 커런트 디렉토리로 되어 있기 때문에 cd 명령을 입력할 필요가 없습니다.바로 copy 명령어로 결합 가능합니다.
copy *.csv __result.csv
명령 프롬프트를 사용했을 때와 마찬가지로 상기 명령어를 실행하는 것만으로 폴더 내의 csv 파일이 모두 결합됩니다.
txt 파일을 모두 결합하려면 아래 명령어를 사용하십시오.
copy *.txt __result.txt
csv 파일의 헤더를 통일하는 방법
일반적인 결합 방법을 취하면 헤더 행 유무에 관계없이 모든 행이 결합됩니다.
txt 파일이라면 전혀 문제없는 동작이지만 csv의 경우 헤더 행은 한 파일만 있으면 되는 경우가 많을 것입니다.
그 경우는 이하의 커맨드를 merge.bat(배치 파일)에 카피 페이스트 해 보존해 주세요.
@echo off
setlocal enabledelayedexpansion
set /a counter=0
for /f %%i in (′dir /b *.csv′) do (
echo %%i
if !counter!==0 (
set /p _head=<%%i
echo !_head!>>result.csv
)
set /a counter=!counter!+1
for /f ′tokens=* skip=1′ %%b in (%%i) do (
echo %%b>>result.csv
)
)
상당히 복잡한 명령어로 프로그래밍 경험이 필요한 기술이므로 명령 해설은 생략합니다.
명령어를 저장하고 나면 merge.bat을 실행해 보세요.헤더 행이 1행만 되고, 이후에는 모두 헤더 행 이외의 데이터가 되어 있습니다.
csv·txt 파일을 결합할 때 포인트
csv나 txt 파일을 결합할 때 몇 가지 눌러두고 싶은 포인트가 있습니다.어떤 파일이라도 깨끗하게 결합할 수 있는 것은 아니기 때문에 제대로 구조를 기억해 둡시다.
결합순서는 알파벳순서
이번에 소개한 방법은 매우 간편하게 여러 파일을 결합할 수 있지만 결합할 순서를 선택할 수는 없습니다.
단, 결합 순서는 완전히 랜덤한 것은 아니고 알파벳 순으로 젊은 파일명부터 순서대로 연결되어 갑니다.
예를 들어 ′s1.csv·a2.csv·s3.csv′의 3가지가 있는 경우는
a2.csv
s1.csv
s3.csv
의 순서로 연결되어 갑니다.
′왜 번호순이 아닌가?′라고 생각하실 수도 있겠지만 파일명의 선두 문자부터 순서대로 정렬이 되기 때문에 s보다 어린 a로 시작하는 파일이 첫 번째 결합 대상이 되고 있는 것입니다.
결합 순서는 컨트롤하고 싶은 경우 파일 이름에 사용하고 있는 알파벳이나 숫자를 의식하도록 합니다.
엑셀형식(.xls·.xlsx등)은 결합불가
csv가 가능하니까 엑셀파일(.xls·.xlsx등)도 가능하다고 생각할지도 모릅니다.
하지만 엑셀에서 사용되는 .xls·.xlsx 형식의 파일은 프로그램 읽기에 특화된 이진 파일(인간이 읽을 수 없는 파일)이기 때문에 이 방법으로는 제대로 결합할 수 없습니다.
이번에는 csv·txt 형식의 파일 결합에 대해 해설하고 있으므로 엑셀 형식의 파일 결합에 대해서는 할애하겠습니다.
tsv 파일도 같은 순서로 결합 가능
csv와 달리 탭에서 셀 분류되는 tsv 파일도 같은 순서로 결합할 수 있습니다.
배치 파일이나 명령 프롬프트 PowerShell을 사용하는 경우는 아래의 명령을 사용합니다.
copy *.tsv __result.tsv
파일 결합에 관해서만 말하면 결합 대상 파일의 확장자가 바뀐 것 뿐이기 때문에 방식 자체는 아무것도 바뀌지 않습니다.tsv 파일을 다룰 일이 있는 경우는 기억해 주세요.
로그 데이터나 트랜잭션 데이터 등의 데이터를 결합하여 하나의 파일로 만들고 싶을 때가 올 수 있습니다.
결합할 파일이 몇 파일이면 수작업으로 복사해도 큰 어려움이 없을 것입니다.
그러나 결합 대상 파일이 수십 수백 개와 맞는 경우라면 어떨까요?결합하는 파일이 방대하면 수작업으로는 매우 효율적이지 않고 자동화의 필요성도 나옵니다.
그래서 이번 시간에는 csv·txt 파일을 일괄적으로 결합하는 방법을 해설해 보겠습니다.
복수의 csv나 txt 파일을 결합하는 방법
여러 csv·txt를 결합하는 방법은 여러 가지가 있기 때문에 각각 순서대로 해설하겠습니다.
배치 파일을 사용하다
배치 파일이란 명령 프롬프트에서 실행할 수 있는 명령을 기술한 파일을 말합니다.배치 파일에 여러 명령어를 작성해 두면 처리 자동화를 할 수 있는 것입니다.
배치 파일은 들어본 적이 없거나 사용한 적이 없다고 하는 분이 많을지도 모릅니다만, 카피 페이스트로 할 수 있기 때문에, 지식이 전혀 없어도 괜찮습니다.
먼저 csv의 결합을 해설하겠습니다.
일단은 어디든 좋으니까 빈 폴더를 만드세요.
작성하면 그 안에 결합하고자 하는 csv 파일을 복사하여 저장합니다.
같은 폴더에 ′marge.bat′이라는 파일을 작성해 주세요.
작성한 marge.bat을 텍스트 에디터로 열고 아래 텍스트를 적어 저장합니다.
copy *.csv __result.csv
저장하면 텍스트 편집기를 닫아도 문제 없습니다.
그런 다음 merge.bat을 더블 클릭하여 실행하십시오.
실행한다고 해서 어떤 창이 뜨지는 않지만 잠시 후 같은 폴더에 _result.csv가 생성되어 있을 것입니다.
이 _result.csv가 동일 폴더 내에 있는 모든 csv 파일이 결합된 파일입니다.시험삼아 텍스트 에디터나 엑셀 등으로 열어보세요.
확실히 하나의 파일로 정리할 수 있을 것입니다.
txt 파일의 경우는?
텍스트 파일의 경우는, merge.bat의 내용을 이하의 것으로 고쳐 써 주세요.
copy *.txt __result.txt
이 명령어를 저장한 배치 파일을 실행하면 동일 폴더 내의 txt 파일이 모두 결합된 __result.txt가 생성됩니다.
명령 프롬프트로 결합하다
명령 프롬프트에서 여러 파일을 결합할 수도 있습니다.
먼저 작업 표시줄의 검색 상자에서 명령 프롬프트를 검색, 부팅합니다.
부팅 후 명령 프롬프트에서 열려 있는 폴더(커런트 디렉토리)를 변경해야 합니다.
결합하고 싶은 파일이 있는 폴더를 탐색기에서 열어두세요.
그런 다음 폴더의 빵 부스러기 목록을 클릭하여 폴더 경로를 복사합니다.
복사하면 명령 프롬프트에서 ′cd′를 입력하고 아까 복사한 폴더 경로를 붙여 엔터키를 누릅니다.
이때붙이는명령은Ctrl+V가아니라우클릭이기때문에틀리지않도록하세요.
무사히 열려 있는 폴더(커런트 디렉토리)를 변경할 수 있으면 명령어 입력란의 텍스트가 아까 입력한 폴더 경로로 바뀌어 있습니다.
이제 csv 파일이 있는 폴더에 명령 프롬프트로 접근할 수 있는 상태입니다.
이 상태에서 csv 파일을 결합 그 이하의 명령어를 입력하고 엔터키를 눌러 보십시오.
copy *.csv __result.csv
결합에 성공하면 이런 메시지가 뜨니 익스플로러 쪽에서 파일을 확인해 보세요.
명령 프롬프트를 사용하는 경우에는 이 방법으로 결합할 수 있습니다.하지만 미리 명령어를 입력해 둔 배치 파일을 사용하는 것이 간단하기 때문에 기억해 두면 좋을 것입니다.
Windows PowerShell로 결합하기
Windows 10에서는 명령 프롬프트가 아닌 Windows PowerShell이 표준 명령줄 인터페이스로 되어 있습니다.
Windows PowerShell은 작업 표시줄에서가 아니라 탐색기에서 부팅할 수 있습니다.
그 관계로 Windows PowerShell을 기동할 때 열려 있던 폴더가 커런트 디렉토리가 되어 cd 명령을 사용하여 폴더를 이동할 필요가 없습니다.
명령 조작 초보자라면 명령 프롬프트보다 Windows Power Shell이 더 다루기 쉬울 것입니다.
PoweShell의 기동은 익스플로러 왼쪽 상단의 「파일」에서 실시할 수 있습니다.
열려 있던 폴더가 커런트 디렉토리로 되어 있기 때문에 cd 명령을 입력할 필요가 없습니다.바로 copy 명령어로 결합 가능합니다.
copy *.csv __result.csv
명령 프롬프트를 사용했을 때와 마찬가지로 상기 명령어를 실행하는 것만으로 폴더 내의 csv 파일이 모두 결합됩니다.
txt 파일을 모두 결합하려면 아래 명령어를 사용하십시오.
copy *.txt __result.txt
csv 파일의 헤더를 통일하는 방법
일반적인 결합 방법을 취하면 헤더 행 유무에 관계없이 모든 행이 결합됩니다.
txt 파일이라면 전혀 문제없는 동작이지만 csv의 경우 헤더 행은 한 파일만 있으면 되는 경우가 많을 것입니다.
그 경우는 이하의 커맨드를 merge.bat(배치 파일)에 카피 페이스트 해 보존해 주세요.
@echo off
setlocal enabledelayedexpansion
set /a counter=0
for /f %%i in (′dir /b *.csv′) do (
echo %%i
if !counter!==0 (
set /p _head=<%%i
echo !_head!>>result.csv
)
set /a counter=!counter!+1
for /f ′tokens=* skip=1′ %%b in (%%i) do (
echo %%b>>result.csv
)
)
상당히 복잡한 명령어로 프로그래밍 경험이 필요한 기술이므로 명령 해설은 생략합니다.
명령어를 저장하고 나면 merge.bat을 실행해 보세요.헤더 행이 1행만 되고, 이후에는 모두 헤더 행 이외의 데이터가 되어 있습니다.
csv·txt 파일을 결합할 때 포인트
csv나 txt 파일을 결합할 때 몇 가지 눌러두고 싶은 포인트가 있습니다.어떤 파일이라도 깨끗하게 결합할 수 있는 것은 아니기 때문에 제대로 구조를 기억해 둡시다.
결합순서는 알파벳순서
이번에 소개한 방법은 매우 간편하게 여러 파일을 결합할 수 있지만 결합할 순서를 선택할 수는 없습니다.
단, 결합 순서는 완전히 랜덤한 것은 아니고 알파벳 순으로 젊은 파일명부터 순서대로 연결되어 갑니다.
예를 들어 ′s1.csv·a2.csv·s3.csv′의 3가지가 있는 경우는
a2.csv
s1.csv
s3.csv
의 순서로 연결되어 갑니다.
′왜 번호순이 아닌가?′라고 생각하실 수도 있겠지만 파일명의 선두 문자부터 순서대로 정렬이 되기 때문에 s보다 어린 a로 시작하는 파일이 첫 번째 결합 대상이 되고 있는 것입니다.
결합 순서는 컨트롤하고 싶은 경우 파일 이름에 사용하고 있는 알파벳이나 숫자를 의식하도록 합니다.
엑셀형식(.xls·.xlsx등)은 결합불가
csv가 가능하니까 엑셀파일(.xls·.xlsx등)도 가능하다고 생각할지도 모릅니다.
하지만 엑셀에서 사용되는 .xls·.xlsx 형식의 파일은 프로그램 읽기에 특화된 이진 파일(인간이 읽을 수 없는 파일)이기 때문에 이 방법으로는 제대로 결합할 수 없습니다.
이번에는 csv·txt 형식의 파일 결합에 대해 해설하고 있으므로 엑셀 형식의 파일 결합에 대해서는 할애하겠습니다.
tsv 파일도 같은 순서로 결합 가능
csv와 달리 탭에서 셀 분류되는 tsv 파일도 같은 순서로 결합할 수 있습니다.
배치 파일이나 명령 프롬프트 PowerShell을 사용하는 경우는 아래의 명령을 사용합니다.
copy *.tsv __result.tsv
파일 결합에 관해서만 말하면 결합 대상 파일의 확장자가 바뀐 것 뿐이기 때문에 방식 자체는 아무것도 바뀌지 않습니다.tsv 파일을 다룰 일이 있는 경우는 기억해 주세요.
반응형