![디렉토리의 파일 그룹을 연결하기 위해 루프를 만드는 방법은 무엇입니까?](https://linux55.com/image/140105/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%9D%98%20%ED%8C%8C%EC%9D%BC%20%EA%B7%B8%EB%A3%B9%EC%9D%84%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EB%A3%A8%ED%94%84%EB%A5%BC%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
수동으로 참여하는 데 시간이 오래 걸리는 매우 큰 파일이 많이 있습니다. 그것들은 다음과 같습니다:
- File_a1.txt
- File_a2.txt
- File_a3.txt
- File_b1.txt
- File_b2.txt
- File_b3.txt
- 파일_c1.txt
- File_c2.txt
- file_c3.txt 등 루프를 사용하여 모든 a, 모든 b, 그리고 모든 c를 함께 연결하는 방법은 무엇입니까?
답변1
나는 "결합"이 "명령을 사용하여 그들 사이의 관계형 JOIN 작업을 수행하는 것 join
"이 아니라 연결을 의미한다고 가정합니다. 또한 파일 이름은 다음과 같은 패턴을 따른다고 가정합니다. file_XN.txt
여기서 X
는 특정 문자와 N
특정 숫자이고 모든 파일은 현재 디렉터리에 있습니다.
파일 연결은 명령을 사용하여 수행되므로 적절한 이름의 파일에 출력을 쓰는 동안 모든 "-files"와 "-files" 등을 사용하여 cat을 호출 cat
해야 합니다 .a
b
for filename in ./file_[a-z]*.txt; do
# extract the letter
letter=${filename#*_} # ./file_XN.txt --> XN.txt
letter=${letter%[0-9]*} # XN.txt --> X
cat "$filename" >>"combined_$letter.txt"
done
그러면 모든 파일을 반복하고 파일 이름에서 문자를 추출합니다. 그런 다음 이 문자는 출력 파일 이름을 구성하는 데 사용되며 현재 파일의 내용이 해당 출력 파일에 추가됩니다.
기본적으로 데이터는 디렉터리에 나열된 파일과 동일한 순서로 추가됩니다.
bash
반복하려는 문자를 사용하고 정확히 알고 있는 경우( 여기에 a
있는 문자 사용 t
) 또 다른 더 짧은 방법은 다음과 같습니다.
for letter in {a..t}; do
cat "file_$letter"*.txt >"combined_$letter.txt"
done
여기서는 파일 이름을 반복하는 대신 문자를 반복하고 각 문자에 대해 해당 문자에 대한 모든 파일을 한 번에 연결합니다.