csplit을 사용하여 복잡한 파일을 file.docked.pdb
더 작은 파일로 분할하고 있습니다.
csplit -k -s -n 3 -f file.docked. file.docked.pdb '/^ENDMDL/+1' '{'7'}'
man csplit
다음 코드를 완벽하게 설명합니다
NAME
csplit - split a file into sections determined by context lines
-k, --keep-files
do not remove output files on errors
-s, --quiet, --silent
do not print counts of output file sizes
-n, --digits=DIGITS
use specified number of digits instead of 2
-f, --prefix=PREFIX
use PREFIX instead of 'xx'
Each PATTERN may be:
/REGEXP/[OFFSET]
copy up to but not including a matching line
{*} repeat the previous pattern as many times as possible
내 의심은 출력 파일의 이름이 지정되기 시작 file.docked.000
하고 앞으로 확장된다는 것입니다.
에서 번호를 얻는 방법은 무엇입니까 file.docked.001
? ? ? 시작?
도구가 이 기능을 전혀 지원하지 않는 경우 해결 방법을 제공해 주세요.
답변1
첫 번째 파일 출력 파일의 인덱스는 항상 0이며 시작 인덱스를 변경할 수 있는 옵션이 없습니다.
해결 방법으로 프로세스 대체를 사용하여 데이터를 출력하기 전에 패턴을 한 번 인쇄할 수 있습니다. 이렇게 하면 가상 라인이 file.docked.000
나중에 삭제할 수 있는 파일로 분할됩니다. 또한 원하는 수의 출력 파일을 얻으려면 반복 패턴을 1씩 늘립니다.
csplit -k -s -n 3 -f file.docked. \
<(echo "ENDMDL dummy, delete this file"; cat file.docked.pdb) '/^ENDMDL/+1' '{8}' &&
rm file.docked.000