script in perl for removing strings between a file

I have file that looks like:

ATOM 2517 O   VAL 160 8.337  12.679  -2.487
ATOM 2518 OXT VAL 160 7.646  12.461  -0.386
TER 
ATOM 2519 N   VAL 161 -14.431  5.789 -25.371
ATOM 2520 H1  VAL 161 -15.336  5.698 -25.811
ATOM 2521 H2  VAL 161 -13.416 10.529  17.708
ATOM 2522 H3  VAL 161 -14.363  9.436  18.498
ATOM 2523 CA  VAL 161   4.400  9.233  16.454
ATOM 2524 HA  VAL 161   3.390  9.170  16.047

I have to remove "TER", the line before "TER" and 3 lines after the line just after TER and make file continuous like this:

ATOM 2517 O   VAL 160   8.337 12.679  -2.487
ATOM 2519 N   VAL 161 -14.431  5.789 -25.371
ATOM 2523 CA  VAL 161   4.400  9.233  16.454
ATOM 2524 HA  VAL 161   3.390  9.170  16.047

This has been answered already at...

bash - perl to remove lines from file - Stack Overflow

$
$
$ cat f33
ATOM 2517 O   VAL 160 8.337  12.679  -2.487
ATOM 2518 OXT VAL 160 7.646  12.461  -0.386
TER
ATOM 2519 N   VAL 161 -14.431  5.789 -25.371
ATOM 2520 H1  VAL 161 -15.336  5.698 -25.811
ATOM 2521 H2  VAL 161 -13.416 10.529  17.708
ATOM 2522 H3  VAL 161 -14.363  9.436  18.498
ATOM 2523 CA  VAL 161   4.400  9.233  16.454
ATOM 2524 HA  VAL 161   3.390  9.170  16.047
$
$
$
$ perl -lne 'if (/^TER/) {$i++}
             elsif (defined $i and $i<6) {$i++; print if $i==2}
             else {print $prev};
             $prev=$_;
             END {print $prev}' f33
 
ATOM 2517 O   VAL 160 8.337  12.679  -2.487
ATOM 2519 N   VAL 161 -14.431  5.789 -25.371
ATOM 2523 CA  VAL 161   4.400  9.233  16.454
ATOM 2524 HA  VAL 161   3.390  9.170  16.047
$
$
$

tyler_durden

1 Like
perl -e ' while (<>){if (! /^TER/ ) {print $prev;$prev=$_;}else{ readline for (1..3);$prev=readline;}}print $prev'

@Skrynesaver, i used the code. It removes only TER and not line before it (ATOM 2518 OXT VAL 160 7.646 12.461 -0.386) and not even3 lines after the immediate line after TER i.e
(ATOM 2520 H1 VAL 161 -15.336 5.698 -25.811
ATOM 2521 H2 VAL 161 -13.416 10.529 17.708
ATOM 2522 H3 VAL 161 -14.363 9.436 18.498)
Ihave attatched a file.

---------- Post updated at 10:52 PM ---------- Previous update was at 10:43 PM ----------

---------- Post updated at 11:15 PM ---------- Previous update was at 10:52 PM ----------

@durden_tyler
if i run this on all 200 files,what change has to be made?since there are 200 files for 1 system and there are 120 systems