我使用 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
,您可以稍后删除该文件。还将重复模式增加一以获得所需的输出文件数量。
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