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