spit out data from unicorn style holding tags from marc
[migration-tools.git] / select_marc.pl
1 #!/usr/bin/perl
2 use MARC::Batch;
3 use MARC::Record;
4 use MARC::File::XML ( BinaryEncoding => 'utf-8' );
5 use MARC::Field;
6
7 my $record_id_file = $ARGV[0];
8 my %record_ids;
9
10 open FILE, $record_id_file;
11 while (my $record_id = <FILE>) {
12     chomp($record_id); $record_ids{ $record_id } = 1;
13 }
14 close FILE;
15
16 my $id_tag = $ARGV[1]; my $id_subfield = $ARGV[2];
17
18 binmode(STDOUT, ':utf8');
19 binmode(STDIN, ':utf8');
20
21 foreach $argnum ( 3 .. $#ARGV ) {
22
23         print STDERR "Processing " . $ARGV[$argnum] . "\n";
24
25         my $batch = MARC::Batch->new('XML',$ARGV[$argnum]);
26         $batch->strict_off();
27         $batch->warnings_off();
28
29     my $count = 0;
30
31         while ( my $record = $batch->next() ) {
32
33         $count++;
34
35                 my $id = $record->field($id_tag);
36                 if (!$id) {
37                         print STDERR "ERROR: This record is missing a $id_tag field.\n" . $record->as_formatted() . "\n=====\n";
38                         next;
39                 }
40                 $id = $id->as_string($id_subfield);
41
42         if (defined $record_ids{ $id }) {
43             open FILE, ">$id";
44             binmode(FILE, ':utf8');
45             print FILE $record->as_xml();
46             close FILE;
47         }
48         }
49     print STDERR "Processed $count records.\n";
50 }