Espero ser explicito y no confundirlos.
Podría utilizar "split" y después seleccionar las columnas. Sin embargo, en algunos casos el orden de las columnas cambia, por lo que en algunos casos mi script podría fallar. Por tal motivo he decido utilizar "substr", ya que lo espacios entre caracteres son siempre los mismos. A continuación coloco como ejemplo solo una parte del archivo del cual necesito extraer la información (los archivos son mucho más grandes).
- Código: Seleccionar todo
COMPND 2 MOLECULE: DIHYDROPTEROATE SYNTHETASE; .
SOURCE 2 ORGANISM_SCIENTIFIC: STAPHYLOCOCCUS AUREUS .
AUTHOR D.KOSTREWA,C.OEFNER,A.D'ARCY .
515 4 0 0 0 TOTAL NUMBER OF RESIDUES, NUMBER OF CHAINS, .
21660.0 ACCESSIBLE SURFACE OF PROTEIN (ANGSTROM**2) .
386 75.0 TOTAL NUMBER OF HYDROGEN BONDS OF TYPE O(I)-->H-N(J)
72 14.0 TOTAL NUMBER OF HYDROGEN BONDS IN PARALLEL BRIDGES,
0 0.0 TOTAL NUMBER OF HYDROGEN BONDS IN ANTIPARALLEL BRIDGES,
0 0.0 TOTAL NUMBER OF HYDROGEN BONDS OF TYPE O(I)-->H-N(I-5)
0 0.0 TOTAL NUMBER OF HYDROGEN BONDS OF TYPE O(I)-->H-N(I+1)
38 7.4 TOTAL NUMBER OF HYDROGEN BONDS OF TYPE O(I)-->H-N(I+2)
66 12.8 TOTAL NUMBER OF HYDROGEN BONDS OF TYPE O(I)-->H-N(I+3)
190 36.9 TOTAL NUMBER OF HYDROGEN BONDS OF TYPE O(I)-->H-N(I+4),
12 2.3 TOTAL NUMBER OF HYDROGEN BONDS OF TYPE O(I)-->H-N(I+5),
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
0 0 0 1 2 0 1 3 2 1 0 0 3 1 2 0 1 1 0 1 0 1 .
2 2 2 6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# RESIDUE AA STRUCTURE BP1 BP2 ACC N-H-->O O-->H-N
*1 2 A T
*2 3 A K
*3 4 A T
*4 5 A K **E
*5 6 A I **E
*6 7 A M **E
*7 8 A G **E
*8 9 A I **E
*9 10 A L **E
10 11 A N **E
11 12 A V
12 13 A T
13 14 A P **G
14 15 A D **G
15 16 A S **G
16 17 A F
Lo que quiero hacer es que el script inicie leyendo a partir de donde la línea comienza con "# RESIDUE" y que inicie la extracción a partir de la siguiente línea. De manera que extraiga la columna que inicia con el número "2" y la columna que tiene espacios vacíos y las letras "E" y "G". Para ello, he escrito el siguiente código:
Using perl Syntax Highlighting
#! /usr/bin/perl -w
$filename = $ARGV[0];
open(FILE, $filename) || die "¡Error!\n\n";
while (<FILE>) {
if(/^\ #/)
{
$bfactorP = substr($_,7,4);
$bfactorL = substr($_,17,1);
print "$bfactorP\t$bfactorL\n";
}
}
close FILE;
$filename = $ARGV[0];
open(FILE, $filename) || die "¡Error!\n\n";
while (<FILE>) {
if(/^\ #/)
{
$bfactorP = substr($_,7,4);
$bfactorL = substr($_,17,1);
print "$bfactorP\t$bfactorL\n";
}
}
close FILE;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Mi problema es que el script empieza a extraer a partir de la línea que inicia con "# RESIDUE" y no sé cómo decirle que comience a extraer a partir de la siguiente línea.
¿Alguien sabe cómo hacerlo?