programing

Bash에서 여러 텍스트 파일을 단일 파일로 연결

kakaobank 2023. 5. 12. 22:37
반응형

Bash에서 여러 텍스트 파일을 단일 파일로 연결

디렉토리의 모든 *.txt 파일을 하나의 큰 텍스트 파일로 결합하는 가장 빠르고 실용적인 방법은 무엇입니까?

현재 나는 윈도우를 cygwin과 함께 사용하고 있어서 BASH에 접근할 수 있습니다.

윈도우 셸 명령어도 좋을 것 같은데 없는 것 같습니다.

이렇게 하면 출력이 모두에 추가됩니다.txt

cat *.txt >> all.txt

이것은 모든 것을 덮어씁니다.txt

cat *.txt > all.txt

지금까지 주어진 모든 솔루션에 대해 셸이 파일이 연결되는 순서를 결정한다는 점만 기억하십시오.Bash, IIRC의 경우 알파벳 순서입니다.순서가 중요한 경우 파일 이름을 적절하게 지정해야 합니다(01file).txt, 02 파일.txt 등) 또는 연결할 순서대로 각 파일을 지정합니다.

$ cat file1 file2 file3 file4 file5 file6 > out.txt

윈도우즈 셸 명령은 다음을 수행할 수 있습니다.

type *.txt > outputfile.txt

유형type명령은 또한 stderr에 파일 이름을 기록합니다. 이는 에 의해 캡처되지 않습니다.>리디렉션 연산자(그러나 콘솔에 표시됨).

윈도우즈 셸을 사용할 수 있습니다.copy파일을 연결합니다.

C:\> copy *.txt outputfile

도움말:

파일을 추가하려면 대상에는 단일 파일을 지정하고 원본에는 여러 파일을 지정합니다(와일드카드 또는 file1+file2+file3 형식 사용).

이러한 방법은 많은 수의 파일에서 작동하지 않으므로 주의하십시오.개인적으로 저는 다음과 같은 라인을 사용했습니다.

for i in $(ls | grep ".txt");do cat $i >> output.txt;done

편집: 댓글에서 말한 것처럼, 당신은 대체할 수 있습니다.$(ls | grep ".txt")와 함께$(ls *.txt)

편집: @gnourf_gnourf 전문 지식 덕분에 glob을 사용하면 디렉터리의 파일을 반복할 수 있습니다.결과적으로, 다음과 같은 신성 모독적인 표현들은$(ls | grep ".txt")로 대체해야 합니다.*.txt(여기의 기사 참조).

좋은 해결책

for i in *.txt;do cat $i >> output.txt;done

이 접근법은 어떻습니까?

find . -type f -name '*.txt' -exec cat {} + >> output.txt

쉘에 대한 가장 실용적인 방법은 cat 명령입니다.다른 방법은 다음과 같습니다.

awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]

예:

type C:\*.txt > C:\1\all.txt

그러면 C:\ 폴더에 있는 모든 txt 파일을 C:\1 폴더에 모두의 이름으로 저장합니다.txt

또는

type [source folder]\* > [destination folder]\[file name].[File extension]

예:

type C:\* > C:\1\all.txt

그러면 폴더에 있는 모든 파일이 C:\1\all에 있는 콘텐츠로 이동합니다.txt

다음과 같이 할 수 있습니다.cat [directory_path]/**/*.[h,m] > test.txt

을 이용하면{}찾으려는 파일의 확장자를 포함하려면 순서 지정 문제가 있습니다.

파일 목록이 너무 길면 가장 많이 업데이트된 답변이 실패합니다.

보다 휴대성이 뛰어난 솔루션은

fd -e txt -d 1 -X awk 1 > combined.txt

-d 1검색을 현재 디렉터리로 제한합니다.이 옵션을 생략하면 모든 항목이 재귀적으로 검색됩니다..txt파일을 저장할 수 있습니다.
-X으로 (으)로 있습니다.--exec-batch()를 합니다.awk 1이 경우)를 클릭하여 모든 검색 결과를 한 번에 확인할 수 있습니다.

메모,fd"표준" 유닉스 프로그램이 아니므로 설치해야 할 가능성이 높습니다.

모든 것이 걸린 문제에 부딪힐 때.txt를 전체로.txt, all.txt가 존재하는지 여부를 확인할 수 있습니다(존재하는 경우).

다음과 같이:

[ -e $"all.txt" ] && rm $"all.txt"

그 모든 것이 끔찍합니다.

ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;

쉬운 일

언급URL : https://stackoverflow.com/questions/2150614/concatenating-multiple-text-files-into-a-single-file-in-bash

반응형