Удалить последний столбец из txt (файл pdb с сохранением исходного форматирования - PullRequest
0 голосов
/ 25 апреля 2019

файл столбца, разделенный пробелами HEADER NpXynWT_apo_300K_0001_amber

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

из этого файла мне нужно удалить последний столбец, оставив такое же количество пробелов между остальными столбцами в выводе: HEADER NpXynWT_apo_300K_0001_amber

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 ]

1 голос
/ 25 апреля 2019

Это работает для GNU SED:

 sed -r 's/\s+\S+$//' file
1 голос
/ 26 апреля 2019

, если данные в 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
1 голос
/ 25 апреля 2019
$ 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
...