从txt中删除最后一列(保持原始格式的pdb文件

时间:2019-04-25 09:45:03

标签: 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.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

从该文件中,我需要删除最后一列,在输出的其余列之间保持相同数量的空格: 标题NpXynWT_apo_300K_0001_琥珀色

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函数来指示分隔符的类型(空格数),列号(最后一个)。是否存在一些通用解决方案,这些解决方案将始终删除任意数量的前导空格的最后一列?

3 个答案:

答案 0 :(得分:1)

$ 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行尾):

sed 's/ *[^ ]*\r$//' file

答案 1 :(得分:1)

这适用于gnu sed:

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

答案 2 :(得分:1)

如果d文件中的数据,请尝试使用gnu sed:

 sed -E 's/(.*)\s*\S+\s*/\1/' d

在gnu awk上尝试过:

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