Ohne die Daten genau zu kennen würde ich, wie auch renee, vorschlagen mit
$/ die Trennung der Datensätze zu erledigen. Löschen von Zeilentrennzeichen geht mit dem
tr//-Operator und Extraktion fest positionierte Bereiche mit
substr.
Insgesamt könnte das Programm also etwa so aussehen:
perl -e '$/ = "<>"; $\ = "\n"; while (<>) { y/\r\n//d; print substr($_, 37, 15) if (substr($_, 9, 3) == 580) }'
When C++ is your hammer, every problem looks like your thumb.