Csplit

如何使 csplit 開始輸出文件名從 001 開始的文件?

  • June 1, 2020

我使用 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???

如果工具根本不支持這一點,請提供解決方法。

第一個文件輸出文件的索引始終為 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

引用自:https://unix.stackexchange.com/questions/590125