This is one way to do it: #!/usr/local/bin/perl -w use strict; use MARC::Batch;
# sort marc records on field 001 # usage: sort_marc.pl infil.mrc > utfil.mrc my $batch = new MARC::Batch( 'USMARC', $ARGV[0] ); my @records = (); my @f001 = (); my $idx = 0; while ( my $MARC = $batch->next ) { push(@records, $MARC); push(@f001, [$idx++, $MARC->field("001")->as_string]); } foreach my $rec (sort { $a->[1] <=> $b->[1] } @f001) { print $records[$rec->[0]]; } __END__ You may need to guard yourself against records having no field 001. 518 records, if that is what you have to deal with, should under "normal" conditions not raise any memory issues. Leif -----Ursprungligt meddelande----- Från: Jackie Shieh [mailto:[EMAIL PROTECTED] Skickat: den 31 januari 2005 21:40 Till: perl4lib@perl.org Ämne: Sort with MARC::Record Has anyone sorted a file of hundreds of records by 001? I have a file of 518 records unsorted and a file of sorted ids from 001 (406). I would like to sort my marc 518 records first before extracting the 406 records based on the 2nd file from the set of 518 records. I'd appreciate any suggestions, thanks. --Jackie |Jackie Shieh |Special Projects & Collections Team |Harlan Hatcher Graduate Library |University of Michigan |920 North University |Ann Arbor, MI 48109-1205 |Phone: 734.936.2401 FAX: 734.615.9788 |E-mail: [EMAIL PROTECTED]