.txt에서 단어를 추출하고 마스터 .txt를 만듭니다.

.txt에서 단어를 추출하고 마스터 .txt를 만듭니다.

예를 들어 내 홈 디렉토리에는 "Anna" "Andrew" et al과 같이 "a"로 시작하는 이름이 포함된 a.txt가 포함된 a 디렉토리가 있습니다. . x,y,z까지의 이름 등을 포함하는 b.txt를 포함하는 b 디렉토리가 있는 기본 디렉토리에서도 동일한 일이 반복됩니다. 이름을 추출하고 모든 사람의 이름이 포함된 master.txt를 만들려면 어떻게 해야 합니까?

답변1

다음을 사용하여 이 작업을 수행할 수 있습니다.고양이명령과파일 이름 확장자. 이러한 파일이 모두 소스 디렉터리에 있고 /path/to/directory해당 디렉터리에 다른 파일이 없는 경우 가장 간결한 명령은 다음과 같습니다.

cat /path/to/directory/*/*.txt > master.txt

master.txt이렇게 하면 소스 디렉터리에 있는 모든 파일의 연결된 내용을 포함하는 현재 디렉터리에 이름이 지정된 파일이 생성됩니다 .노트:여기에는 소스 디렉터리의 모든 하위 디렉터리에 있는 모든 파일이 포함됩니다.

디렉토리에 다른 파일이 있는 경우(또는 더 정확한 파일을 원하는 경우) 다음 명령을 사용할 수 있습니다.

cat /path/to/directory/[a-z]/[a-z].txt > master.txt

이는 소스 디렉터리의 다음 파일과만 일치합니다.

a/a.txt
a/b.txt
a/c.txt
.
.
.
z/x.txt
z/y.txt
z/z.txt

소스 디렉터리에 다른 파일이 있거나 유사한 파일이 있지만 a/z.txt하위 디렉터리 이름이 파일의 기본 이름과 일치하지 않고 해당 파일을 제외하려는 경우 보다 정확한 명령을 사용하여 일치하는 파일 목록의 범위를 좁혀야 합니다. . 이 경우 다음을 사용할 수 있습니다.버팀대 확장그리고for 루프:

for letter in {a..z}; do \
    cat "/path/to/directory/${letter}/${letter}.txt"; \
done >> master.txt

이는 질문에 지정한 파일과 정확히 일치하며 그 외에는 아무것도 일치하지 않습니다.

답변2

홈 디렉터리의 경로를 바꾸고 main_dir스크립트에 저장한 후 터미널에서 실행하세요.sh ./script-name.sh

#!/bin/bash
for i in $( cd main_dir && ls ); do
    cat "main_dir/$i/$i.txt" >> "master.txt"
done

관련 정보