디렉토리의 파일 그룹을 연결하기 위해 루프를 만드는 방법은 무엇입니까?

디렉토리의 파일 그룹을 연결하기 위해 루프를 만드는 방법은 무엇입니까?

수동으로 참여하는 데 시간이 오래 걸리는 매우 큰 파일이 많이 있습니다. 그것들은 다음과 같습니다:

  • 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해야 합니다 .ab

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

여기서는 파일 이름을 반복하는 대신 문자를 반복하고 각 문자에 대해 해당 문자에 대한 모든 파일을 한 번에 연결합니다.

관련 정보