it-swarm-ko.tech

디렉토리의 모든 (텍스트) 파일을 하나로 병합하는 방법은 무엇입니까?

14 개의 파일이 모두 한 텍스트의 일부입니다. 그것들을 하나로 병합하고 싶습니다. 그렇게하는 방법?

99
Ivan

대부분의 사람들이 파일을 표준 출력으로 출력하기 위해 사용하더라도, 이것은 기술적으로 cat ( "concatenate")의 역할입니다. 파일 이름을 여러 개 지정하면 파일 이름이 모두 순차적으로 출력 된 다음 새 파일로 리디렉션 할 수 있습니다. 모든 파일의 경우 * (또는 /path/to/directory/* 디렉토리에 없다면) 셸에서 모든 파일 이름으로 확장합니다.

$ cat * > merged-file
182
Michael Mrozek

파일이 동일한 디렉토리에 있지 않은 경우 연결하기 전에 find 명령을 사용할 수 있습니다.

find /path/to/directory/ -name *.csv -print0 | xargs -0 -I file cat file > merged.file

파일이 이미 주문되어 있고 파일을 병합하여 분석하려고 할 때 매우 유용합니다.


더 휴대 가능 :

find /path/to/directory/ -name *.csv -exec cat {} + > merged.file

파일 순서를 유지하거나 유지하지 않을 수 있습니다.

27
3nrique0

명령

$ cat * > merged-file

실제로 병합에 '병합 파일'을 포함하여 원치 않는 파일을 생성하는 바람직하지 않은 부작용이 있습니다. 이 문제를 해결하려면 병합 된 파일을 다른 디렉토리에 작성하십시오.

$ cat * > ../merged-file

또는 병합 된 파일을 무시하는 패턴 일치를 사용하십시오.

$ cat *.txt > merged-file
10
Christopher Jones

여기에서 다른 것들과 마찬가지로 ... cat

당신이 가지고 있다고 말할 수 있습니다 :

~/file01
~/file02
~/file03
~/file04
~/fileA
~/fileB
~/fileC
~/fileD

그리고 당신은 단지 file01에서 file03fileA ~ fileC :

cat ~/file01 ~/file02 ~/file03 ~/fileA ~/fileB ~/fileC > merged-file

또는 중괄호 확장을 사용하여 :

cat ~/file0{1..3} ~/file{A..C} > merged-file

또는 더 멋진 괄호 확장 사용 :

cat ~/file{0{1..3},{A..C}} > merged-file

또는 for 루프를 사용할 수 있습니다 :

for i in file0{1..3} file{A..C}; do cat ~/"$i"; done > merged-file
10
Florin Idita

파일의 pattern를 지정하고 다음과 같이 모든 파일을 병합 할 수 있습니다.

cat *pattern* >> mergedfile
0
user182845

또 다른 옵션은 sed입니다.

sed r 1.txt 2.txt 3.txt > merge.txt 

또는...

sed h 1.txt 2.txt 3.txt > merge.txt 

또는...

sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here

또는 리디렉션없이 ...

 sed wmerge.txt 1.txt 2.txt 3.txt

마지막 줄은 또한 wmerge.txt가 아닌 merge.txt입니다. w "merge.txt"를 사용하여 파일 이름과 혼동을 피하고 자동 출력의 경우 -n을 사용할 수 있습니다.

물론 와일드 카드를 사용하여 파일 목록을 줄일 수도 있습니다. 예를 들어, 위 예제에서와 같이 번호가 매겨진 파일의 경우 다음과 같이 중괄호로 범위를 지정할 수 있습니다.

sed -n w"merge.txt" {1..3}.txt
0
Harini