Retrieve data from one file comparing the ID in the second file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Retrieve data from one file comparing the ID in the second file
# 8  
Old 09-18-2012
Ah, my fault, I based the logic on the first record posted, multiple AC entries are possible. If I am correct in assuming that only one ID entry is possible per record, the following should work.
Code:
#!/usr/bin/perl

use strict;
use warnings;

open(my $id_file, '<', 'id_file')|| die "Could not open id_file\n\t$!";;
my $in_record=0;
my @ids=<$id_file>;
close $id_file;
chomp(@ids);
my %id_check;
map {$_++} @id_check{@ids};
open(my $records, '<', 'tmp.dat')|| die "Could not open tmp.dat\n\t$!";
my $head;
while(<$records>){
    if (/^ID/){
        $head=$_
        $in_record=0;
    }
    if (/^AC/){
        my @entries=$_=~/\s+([^;]+);/g;
        for my $id(@entries){
            $in_record=1 if ($id_check{$id});
        }
    print $head if $in_record;
    }
    print if $in_record;
}

# 9  
Old 09-18-2012
Hi,
I am getting this error.
Code:
bash-3.2$ perl kaavya.pl
Scalar found where operator expected at kaavya.pl line 18, near "$_
        $in_record"
        (Missing operator before $in_record?)
syntax error at kaavya.pl line 18, near "$_
        $in_record"
Execution of kaavya.pl aborted due to compilation errors.


Image
# 10  
Old 09-18-2012
Code:
        $head=$_;

This User Gave Thanks to elixir_sinari For This Post:
# 11  
Old 09-18-2012
Oh and one more thing
Code:
#!/usr/bin/perl

use strict;
use warnings;

open(my $id_file, '<', 'id_file')|| die "Could not open id_file\n\t$!";;
my $in_record=0;
my @ids=<$id_file>;
close $id_file;
chomp(@ids);
my %id_check;
map {$_++} @id_check{@ids};
open(my $records, '<', 'tmp.dat')|| die "Could not open tmp.dat\n\t$!";
my $head;
while(<$records>){
    if (/^ID/){
        $head=$_ ;
        $in_record=0;
    }
    if (/^AC/){
        my @entries=$_=~/\s+([^;]+);/g;
        for my $id(@entries){
            $in_record=1 if ($id_check{$id});
        }
        if ($in_record){
            print $head ;
            $head="";
        }
    }
    print if $in_record;
}

will prevent the duplicate ID entries being printed Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Grep: Retrieve two strings from one file to find them anyone on line in another file

I am having trouble matching *two* strings from one file anywhere in a line of a second file, and could use some help getting this figured out. My preference would be to use grep for this because I would like to take advantage of its -A option. The latter is due to the fact that I would like both... (2 Replies)
Discussion started by: jvoot
2 Replies

2. Shell Programming and Scripting

How can I retrieve the matching records from data file mentioned?

XYZNA0000778800Z 16123000012300321000000008000000000000000 16124000012300322000000007000000000000000 17234000012300323000000005000000000000000 17345000012300324000000004000000000000000 17456000012300325000000003000000000000000 9 XYZNA0000778900Z 16123000012300321000000008000000000000000... (8 Replies)
Discussion started by: later_troy
8 Replies

3. Shell Programming and Scripting

Comparing Data file with Crtl file

Hi, I need to compare a file with its contents matching to that of another file(filename , received date and record count). Lets say has File A original data Ex - 1,abc,1234 2,bcd,4567 3,cde,8901 and File B has details of File A Ex- FILEA.TXT|06/17|2010|3 (filename)|(received... (18 Replies)
Discussion started by: Prashanth B
18 Replies

4. UNIX for Dummies Questions & Answers

Mapping a data in a file and delete line in source file if data does not exist.

Hi Guys, Please help me with my problem here: I have a source file: 1212 23232 343434 ASAS1 4 3212 23232 343434 ASAS2 4 3234 23232 343434 QWQW1 4 1134 23232 343434 QWQW2 4 3212 23232 343434 QWQW3 4 and a mapping... (4 Replies)
Discussion started by: kokoro
4 Replies

5. UNIX for Dummies Questions & Answers

Hot to retrieve *.sql file names which we refer in .sh file.

Hi Guys, How to retrieve/get *.sql file names which we refer in all *.sh files. Can any one help me on this. Thanks, Kolipaka (3 Replies)
Discussion started by: lakshmanrk811
3 Replies

6. UNIX for Advanced & Expert Users

Retrieve data and redirect to a file

How to write a shell script to retrieve datas from database after that this database are redirect to a excell sheet and then i got a mail that gives details about the database with the column name and data.. I m using oracle 9i... Thanks, Anup Das (2 Replies)
Discussion started by: anupdas
2 Replies

7. Programming

to find header in Mp3 file and retrieve data

hi all, In an mp3 file , data is arranged in sequence of header and data ,how to retrieve data between two headers. Is the data between two headers fixed? because as per theory it says 1152 samples will be there , but dont knw how many bits one sample correspond to? it would help if any c... (2 Replies)
Discussion started by: shashi
2 Replies

8. Shell Programming and Scripting

Comparing data inside file

Hi Everyone, I will try to explain my question please forgive my english here. I am looking for shell script or command that can compare data in the files. I have 50 files in one directory test1 test2 test3 ....so on. I want to compare data in each files with each other and output each... (4 Replies)
Discussion started by: email-lalit
4 Replies

9. Shell Programming and Scripting

Retrieve data from a file

Hello guys I want to retrieve two data from a file, like this: bash-2.03$ cat numtest 123456 123457 bash-2.03$ more ./test_num #!/bin/bash num1= num2= cnt=1 while read x do num${cnt}=$x cnt=$(($cnt+1)) done <$1 echo $num1 "\n" $num2 But when i executed this script, error... (2 Replies)
Discussion started by: tpltp
2 Replies

10. Shell Programming and Scripting

Comparing data in file with values in table

Hi, I want to calculate the number of pipe delimiters in a file for all lines seperately. For eg:i have a file Project.txt Mohit|chawla|123|678 File1|File2|345|767|678 And my file contains many lines like this it shd give me the output as 4 5 or give me the output for all the... (0 Replies)
Discussion started by: Mohit623
0 Replies
Login or Register to Ask a Question