Line 8: |
Line 8: |
| This one-liner splits the file models.pdb into individual pdb files named model_###.pdb. | | This one-liner splits the file models.pdb into individual pdb files named model_###.pdb. |
| | | |
− | '''grep -n 'MODEL\|ENDMDL' models.pdb | '''
| + | grep -n 'MODEL\|ENDMDL' models.pdb | cut -d: -f 1 | \ |
− | '''cut -d: -f 1 | '''
| + | awk '{if(NR%2) printf "sed -n %d,",$1+1; else printf "%dp > model_%03d.pdb\n", $1-1,NR/2;}' | bash -sf |
− | '''awk '{if(NR%2) printf "sed -n %d,",$1+1; else printf "%dp > model_%03d.pdb\n", $1-1,NR/2;}' | '''
| |
− | '''bash -sf'''
| |
| | | |
| == Bash script == | | == Bash script == |
| | | |
− | '''i=1'''
| + | i=1 |
− | | + | while read -a line; do |
− | '''while read -a line; do'''
| + | echo "${line[@]}" >> model_${i}.pdb |
− | | + | [[ ${line[0]} == ENDMDL ]] && ((i++)) |
− | ''' echo "${line[@]}" >> model_${i}.pdb'''
| + | done < /path/to/file.pdb |
− | | |
− | ''' [[ ${line[0]} == ENDMDL ]] && ((i++))'''
| |
− | | |
− | '''done < /path/to/file.pdb'''
| |
| | | |
| | | |
Line 30: |
Line 24: |
| Should be called as | | Should be called as |
| | | |
− | awk -f script.awk < models.pdb | + | awk -f script.awk < models.pdb |
| | | |
− | '''BEGIN {file = 0; filename = "model_" file ".pdb"}'''
| + | BEGIN {file = 0; filename = "model_" file ".pdb"} |
− | | + | /ENDMDL/ {getline; file ++; filename = "model_" file ".pdb"} |
− | '''/ENDMDL/ {getline; file ++; filename = "model_" file ".pdb"}'''
| + | {print $0 > filename} |
− | | |
− | '''{print $0 > filename}'''
| |
| | | |
| | | |
| == Perl script == | | == Perl script == |
| | | |
− | '''$base='1g9e';open(IN,"<$base.pdb");@indata = <IN>;$i=0;'''
| + | $base='1g9e';open(IN,"<$base.pdb");@indata = <IN>;$i=0; |
− | | + | foreach $line(@indata) { |
− | '''foreach $line(@indata) {'''
| + | if($line =~ /^MODEL/) {++$i;$file="${base}_$i.pdb";open(OUT,">$file");next} |
− | | + | if($line =~ /^ENDMDL/) {next} |
− | '''if($line =~ /^MODEL/) {++$i;$file="${base}_$i.pdb";open(OUT,">$file");next}'''
| + | if($line =~ /^ATOM/ || $line =~ /^HETATM/) {print OUT "$line"} |
− | | + | } |
− | '''if($line =~ /^ENDMDL/) {next}'''
| |
− | | |
− | '''if($line =~ /^ATOM/ || $line =~ /^HETATM/) {print OUT "$line"}'''
| |
− | | |
− | '''}'''
| |
| | | |
| | | |
| Back to [[Useful scripts (aka smart piece of code)]] | | Back to [[Useful scripts (aka smart piece of code)]] |