분할 명령을 사용하여 분할 파일 이름 지정

분할 명령을 사용하여 분할 파일 이름 지정

나는 디렉토리의 모든 파일을 읽고, 조건부 검사를 수행하고, 레코드(줄) 수에 따라 일부 파일을 분할하는 쉘 스크립트를 작성하고 있습니다.

abc.txt 파일을 abc(AA 또는 01).txt로 분할하고 싶습니다. (abc로 시작하고 .txt로 끝나는 한 아무 것도 상관하지 않습니다.)

이를 수행하는 쉬운 방법이 있습니까?

분할 명령을 사용하고 있습니다.

split -l $line_count $file $????   

혼란스러워요. 대신 무엇을 사용해야 하나요? ? ?

나는 또한 다른 접근 방식에 열려 있지만 나머지 스크립트가 이미 준비되어 있으므로 ???만 변경하는 것을 선호합니다.

매우 감사합니다

답변1

노력하다:

split -l 5 --additional-suffix=.txt abc.txt abc

또는 문자 대신 숫자를 원하는 경우:

split -l 5 -d --additional-suffix=.txt abc.txt abc

abc파일 이름 뒤에 추가하는 것은접두사.

옵션 을 접미사로 원했기 때문에 .txt옵션을 추가했습니다 --additional-suffix=.txt.

선택 사항은 문자 대신 숫자를 사용함을 -d나타냅니다 .split

파일이 포함된 디렉터리부터 시작하겠습니다.

$ ls
abc.txt

이제 파일을 분할해 보겠습니다.

$ split -l 5 -d --additional-suffix=.txt abc.txt abc
$ ls
abc00.txt  abc01.txt  abc02.txt  abc03.txt  abc.txt

해결 방법 1: 셸 사용

GNU 분할의 현재 버전은 이 --additional-suffix옵션을 지원하며 splitGNU coreutils의 일부입니다. 이는 결국 이 옵션을 모든 Linux 시스템에서 사용할 수 있음을 의미합니다.

split현재 파일이 부족한 시스템의 경우 해결 방법은 파일을 만든 후 파일 이름을 바꾸는 것입니다. 예를 들어:

$ split -l 5 -d abc.txt abc
$ for f in ./abc??; do mv "$f" "$f.txt"; done
$ ls
abc00.txt  abc01.txt  abc02.txt  abc03.txt  abc.txt

위에서는 기본 접미사 길이 2가 적용되었다고 가정합니다. 그렇지 않은 경우 ?사용 중인 접미사 길이와 일치하도록 숫자를 변경하십시오 . 예를 들어, 접미사 길이 5를 사용하는 경우:

$ split -l 5 -a 5 -d abc.txt abc
$ for f in ./abc?????; do mv "$f" "$f.txt"; done
$ ls
abc00000.txt  abc00001.txt  abc00002.txt  abc00003.txt  abc.txt

해결 방법 2: awk 사용

여기서 옵션은 l각 분할 파일에 포함된 행 수를 지정하고 d분할 파일 이름에 사용되는 비트 수를 지정합니다. d충분히 큰지 확인하세요 .

$ awk -v l=5 -v d=2 '{n="0000" int((NR-1)/l); f="abc" substr(n,length(n)+1-d) ".txt"; if (f!=old) close(old); old=f; print >f}' abc.txt
$ ls
abc00.txt  abc01.txt  abc02.txt  abc03.txt  abc.txt

관련 정보