[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [WOT] sh script to relace chars in #1 w/ chars in #2?



On Fri, Jan 12, 2001 at 10:46:36AM -0800, Kenward Vaughan wrote:
...

Though you ask for a sh script, this problem is easily solved with a
higher level scripting language like Perl or Python.  As I can't get
my mind to grog Perl, I'll go ahead with Python:


#/usr/bin/python
# expected use cleanup hup.m3d hup.pdb
# to replace 'Du' with "O " inline.
# MIND YOU, THIS IS UNTESTED CODE, SO TAKE CARE AND BACKUP FIRST


import sys, fileinput
name = sys.argv[1]


### Input files: <name>.m3d		output files: <name>.pdb
### In each file, individual atoms take up a line each.
 
# let us start by reading the input file
# and store it internally as a list of lines
m3d = open(name+".pdb").readlines()

# the second file is input and output, so we use a smart Python module
# to easy coping with this.  A backup is created and changes made to lines
# can be preserved in the file simply by writing to stdout.
pdb = fileinput.input(name+".pdb", inplace=1, backup=1)


### The list of atoms in the input file always start on the 3rd line, and the
# so let's get rid ot those first 2 lines
m3d = m3d[2:]

### labels cover columns 7 and 8 (one or two letters/symbol, space if no 2nd
### letter).  I have yet to see an improperly constructed file.
# let's get rid of all unneeded chars
m3d = map(lambda x: x[6,8], m3d)

### The list begins on line 3 in the output file, with symbols in col. 14,15.
#                           ^? but the example shows 3 leading lines! 
# anyway, let's save those lines firs?t
while pdb.filelineno()!=3:  #or 2????
    sys.stdout(pdb.readline())

### This format is definitely consistent, coming out of the converter app.
### 
### Other lines follow the list in both files. So...
###   input file:		 output file:
### ..........		........
### ..........		........
### ......O ....	........
### ......H ....	ATOM.........Du.... <-- needs to change to "O "
### ......H ....	ATOM.........H ....
### ........		ATOM.........H ....
### 			.........

for atom in m3d:
    line = pdb.readline()
    if line[13:15] == "Du":
       line[13:15] = m3d
    sys.stdout(line)

-- 
groetjes, carel



Reply to: