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
'programing' 카테고리의 다른 글
| _id를 집계에서 숨기는 방법? (0) | 2023.05.12 |
|---|---|
| 큰 정수를 가능한 가장 작은 문자열로 압축 (0) | 2023.05.12 |
| MongoDB가 서버를 시작할 수 없습니다.이 빌드의 mongod에서는 기본 스토리지 엔진 'wiredTiger'를 사용할 수 없습니다. (0) | 2023.05.12 |
| Android adb "동기화 연결을 열 수 없습니다!" (0) | 2023.05.12 |
| mongodump 사용: "mongodump: 명령을 찾을 수 없습니다." (0) | 2023.05.12 |