수동으로 참여하는 데 시간이 오래 걸리는 매우 큰 파일이 많이 있습니다. 그것들은 다음과 같습니다:
- 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
여기서는 파일 이름을 반복하는 대신 문자를 반복하고 각 문자에 대해 해당 문자에 대한 모든 파일을 한 번에 연결합니다.