Sed 从txt(pdb文件)中删除最后一列,保留其原始格式

Sed 从txt(pdb文件)中删除最后一列,保留其原始格式,sed,Sed,由空格分隔的列文件 标题NpXynWT_apo_300K_0001_琥珀色 ATOM 1 N MET 1 22.849 2.086 17.904 1.00 0.00 N ATOM 2 CA MET 1 21.710 2.631 17.411 1.00 0.00 C ATOM 3 C MET 1 20.525 1.737 17

由空格分隔的列文件 标题NpXynWT_apo_300K_0001_琥珀色

ATOM      1  N   MET     1      22.849   2.086  17.904  1.00  0.00           N  
ATOM      2  CA  MET     1      21.710   2.631  17.411  1.00  0.00           C  
ATOM      3  C   MET     1      20.525   1.737  17.578  1.00  0.00           C  
ATOM      4  O   MET     1      20.530   0.650  17.113  1.00  0.00           O  
ATOM      5  CB  MET     1      21.878   2.974  15.929  1.00  0.00           C  
ATOM      6  CG  MET     1      20.710   3.743  15.334  1.00  0.00           C  
ATOM      7  SD  MET     1      20.954   4.142  13.593  1.00  0.00           S  
ATOM      8  CE  MET     1      22.272   5.350  13.704  1.00  0.00           C  
ATOM      9  HA  MET     1      21.472   3.545  17.955  1.00  0.00           H  
ATOM     10  HB2 MET     1      22.788   3.567  15.838  1.00  0.00           H  
ATOM     11  HB3 MET     1      22.004   2.033  15.394  1.00  0.00           H  
ATOM     12  HG2 MET     1      19.813   3.133  15.439  1.00  0.00           H  
ATOM     13  HG3 MET     1      20.589   4.667  15.900  1.00  0.00           H  
ATOM     14  HE1 MET     1      23.144   4.895  14.173  1.00  0.00           H  
ATOM     15  HE2 MET     1      22.536   5.694  12.704  1.00  0.00           H  
ATOM     16  HE3 MET     1      21.939   6.198  14.303  1.00  0.00           H  
ATOM     17  H1  MET     1      22.632   1.159  18.243  1.00  0.00           H  
ATOM     18  H2  MET     1      23.105   2.667  18.689  1.00  0.00           H  
ATOM     19  H3  MET     1      23.471   2.005  17.112  1.00  0.00           H
ATOM      1  N   MET     1      22.849   2.086  17.904  1.00  0.00  
ATOM      2  CA  MET     1      21.710   2.631  17.411  1.00  0.00 
ATOM      3  C   MET     1      20.525   1.737  17.578  1.00  0.00 
ATOM      4  O   MET     1      20.530   0.650  17.113  1.00  0.00  
ATOM      5  CB  MET     1      21.878   2.974  15.929  1.00  0.00  
ATOM      6  CG  MET     1      20.710   3.743  15.334  1.00  0.00
ATOM      7  SD  MET     1      20.954   4.142  13.593  1.00  0.00  
ATOM      8  CE  MET     1      22.272   5.350  13.704  1.00  0.00  
ATOM      9  HA  MET     1      21.472   3.545  17.955  1.00  0.00 
ATOM     10  HB2 MET     1      22.788   3.567  15.838  1.00  0.00
ATOM     11  HB3 MET     1      22.004   2.033  15.394  1.00  0.00  
ATOM     12  HG2 MET     1      19.813   3.133  15.439  1.00  0.00
ATOM     13  HG3 MET     1      20.589   4.667  15.900  1.00  0.00
ATOM     14  HE1 MET     1      23.144   4.895  14.173  1.00  0.00
ATOM     15  HE2 MET     1      22.536   5.694  12.704  1.00  0.00  
ATOM     16  HE3 MET     1      21.939   6.198  14.303  1.00  0.00 
ATOM     17  H1  MET     1      22.632   1.159  18.243  1.00  0.00  
ATOM     18  H2  MET     1      23.105   2.667  18.689  1.00  0.00  
ATOM     19  H3  MET     1      23.471   2.005  17.112  1.00  0.00
从该文件中,我需要删除最后一列,并在输出中的其余列之间保持相同数量的空格: 标题NpXynWT_apo_300K_0001_琥珀色

ATOM      1  N   MET     1      22.849   2.086  17.904  1.00  0.00           N  
ATOM      2  CA  MET     1      21.710   2.631  17.411  1.00  0.00           C  
ATOM      3  C   MET     1      20.525   1.737  17.578  1.00  0.00           C  
ATOM      4  O   MET     1      20.530   0.650  17.113  1.00  0.00           O  
ATOM      5  CB  MET     1      21.878   2.974  15.929  1.00  0.00           C  
ATOM      6  CG  MET     1      20.710   3.743  15.334  1.00  0.00           C  
ATOM      7  SD  MET     1      20.954   4.142  13.593  1.00  0.00           S  
ATOM      8  CE  MET     1      22.272   5.350  13.704  1.00  0.00           C  
ATOM      9  HA  MET     1      21.472   3.545  17.955  1.00  0.00           H  
ATOM     10  HB2 MET     1      22.788   3.567  15.838  1.00  0.00           H  
ATOM     11  HB3 MET     1      22.004   2.033  15.394  1.00  0.00           H  
ATOM     12  HG2 MET     1      19.813   3.133  15.439  1.00  0.00           H  
ATOM     13  HG3 MET     1      20.589   4.667  15.900  1.00  0.00           H  
ATOM     14  HE1 MET     1      23.144   4.895  14.173  1.00  0.00           H  
ATOM     15  HE2 MET     1      22.536   5.694  12.704  1.00  0.00           H  
ATOM     16  HE3 MET     1      21.939   6.198  14.303  1.00  0.00           H  
ATOM     17  H1  MET     1      22.632   1.159  18.243  1.00  0.00           H  
ATOM     18  H2  MET     1      23.105   2.667  18.689  1.00  0.00           H  
ATOM     19  H3  MET     1      23.471   2.005  17.112  1.00  0.00           H
ATOM      1  N   MET     1      22.849   2.086  17.904  1.00  0.00  
ATOM      2  CA  MET     1      21.710   2.631  17.411  1.00  0.00 
ATOM      3  C   MET     1      20.525   1.737  17.578  1.00  0.00 
ATOM      4  O   MET     1      20.530   0.650  17.113  1.00  0.00  
ATOM      5  CB  MET     1      21.878   2.974  15.929  1.00  0.00  
ATOM      6  CG  MET     1      20.710   3.743  15.334  1.00  0.00
ATOM      7  SD  MET     1      20.954   4.142  13.593  1.00  0.00  
ATOM      8  CE  MET     1      22.272   5.350  13.704  1.00  0.00  
ATOM      9  HA  MET     1      21.472   3.545  17.955  1.00  0.00 
ATOM     10  HB2 MET     1      22.788   3.567  15.838  1.00  0.00
ATOM     11  HB3 MET     1      22.004   2.033  15.394  1.00  0.00  
ATOM     12  HG2 MET     1      19.813   3.133  15.439  1.00  0.00
ATOM     13  HG3 MET     1      20.589   4.667  15.900  1.00  0.00
ATOM     14  HE1 MET     1      23.144   4.895  14.173  1.00  0.00
ATOM     15  HE2 MET     1      22.536   5.694  12.704  1.00  0.00  
ATOM     16  HE3 MET     1      21.939   6.198  14.303  1.00  0.00 
ATOM     17  H1  MET     1      22.632   1.159  18.243  1.00  0.00  
ATOM     18  H2  MET     1      23.105   2.667  18.689  1.00  0.00  
ATOM     19  H3  MET     1      23.471   2.005  17.112  1.00  0.00
我想我需要一些SED函数来指示分隔符的类型(空格的数量)、列的数量(最后一个)。是否有一些通用的解决方案,可以用前面的空格的任何数量来删除最后一列

$ sed 's/ *[^ ]* *$//' file
ATOM      1  N   MET     1      22.849   2.086  17.904  1.00  0.00
ATOM      2  CA  MET     1      21.710   2.631  17.411  1.00  0.00
ATOM      3  C   MET     1      20.525   1.737  17.578  1.00  0.00
ATOM      4  O   MET     1      20.530   0.650  17.113  1.00  0.00
ATOM      5  CB  MET     1      21.878   2.974  15.929  1.00  0.00
ATOM      6  CG  MET     1      20.710   3.743  15.334  1.00  0.00
ATOM      7  SD  MET     1      20.954   4.142  13.593  1.00  0.00
ATOM      8  CE  MET     1      22.272   5.350  13.704  1.00  0.00
ATOM      9  HA  MET     1      21.472   3.545  17.955  1.00  0.00
ATOM     10  HB2 MET     1      22.788   3.567  15.838  1.00  0.00
ATOM     11  HB3 MET     1      22.004   2.033  15.394  1.00  0.00
ATOM     12  HG2 MET     1      19.813   3.133  15.439  1.00  0.00
ATOM     13  HG3 MET     1      20.589   4.667  15.900  1.00  0.00
ATOM     14  HE1 MET     1      23.144   4.895  14.173  1.00  0.00
ATOM     15  HE2 MET     1      22.536   5.694  12.704  1.00  0.00
ATOM     16  HE3 MET     1      21.939   6.198  14.303  1.00  0.00
ATOM     17  H1  MET     1      22.632   1.159  18.243  1.00  0.00
ATOM     18  H2  MET     1      23.105   2.667  18.689  1.00  0.00
ATOM     19  H3  MET     1      23.471   2.005  17.112  1.00  0.00
  • *
    匹配零个或多个空格
  • [^]*
    匹配除空格以外的任何字符中的零个或多个
  • s/regexp/replacement/
    regexp
    与输入行匹配,并将匹配的子字符串替换为
    replacement
示例中有尾随空格,上面的命令也将删除它们。如果实际输入中没有尾随空格,请使用:

sed 's/ *[^ ]*$//' file
如果这些尾随空格实际上是回车符(即您的输入具有Windows行结尾):


这适用于gnu sed:

 sed -r 's/\s+\S+$//' file

如果在gnu上试用
d
文件中的数据:

 sed -E 's/(.*)\s*\S+\s*/\1/' d
在gnu awk上试用:

awk -F' *' '{l=gensub(/(.*)\s\S+\s*$/,"\\1",1);print l}' d

即使是现在,我也不确定前导空格是故意使用还是错误使用;),将留给OPit的一个空格分隔文件,正如我在第一篇文章中指出的那样,因此我需要一个解决方案,该解决方案将适用于最后一列中的任意数量的空格!