14 개의 파일이 모두 한 텍스트의 일부입니다. 그것들을 하나로 병합하고 싶습니다. 그렇게하는 방법?
답변
cat
대부분의 사람들이 파일을 표준 출력으로 출력하기 위해 사용하더라도 기술적으로 ( “연결”)해야 할 일입니다. 파일 이름을 여러 개 지정하면 파일 이름이 모두 순차적으로 출력 된 다음 새 파일로 리디렉션 할 수 있습니다. 모든 파일의 경우 그냥 사용하십시오 *
(또는 /path/to/directory/*
디렉토리에 없다면) 쉘은 모든 파일 이름으로 확장합니다
$ cat * > merged-file
답변
파일이 동일한 디렉토리에 있지 않은 경우 연결하기 전에 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
파일 순서를 유지하거나 유지하지 않을 수 있습니다.
답변
명령
$ cat * > merged-file
실제로 병합에 ‘병합 파일’을 포함시켜 원치 않는 파일을 생성하는 바람직하지 않은 부작용이 있습니다. 이 문제를 해결하려면 병합 된 파일을 다른 디렉토리에 작성하십시오.
$ cat * > ../merged-file
또는 병합 된 파일을 무시하는 패턴 일치를 사용하십시오.
$ cat *.txt > merged-file
답변
여기에서 다른 사람들이 말하듯이 … 당신은 사용할 수 있습니다 cat
당신이 가지고 있다고 말할 수 있습니다 :
~/file01
~/file02
~/file03
~/file04
~/fileA
~/fileB
~/fileC
~/fileD
그리고 당신은 단지 원하는 file01
에 file03
와 fileA
에 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
답변
pattern
파일을 지정하고 다음과 같이 모든 파일을 병합 할 수 있습니다 .
cat *pattern* >> mergedfile
답변
또 다른 옵션은 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