CGI/Perl Guide | Learning Center | Forums | Advertise | Login
Site Search: in

  Main Index MAIN
INDEX
Search Posts SEARCH
POSTS
Who's Online WHO'S
ONLINE
Log in LOG
IN

Home: Perl Programming Help: Beginner:
How to include another column to check in script

 



regex2012
User

Jun 8, 2016, 10:01 AM

Post #1 of 4 (1770 views)
How to include another column to check in script Can't Post

I have a script that checks for duplicates. However it does not work of course when we have 3 columns.

So my intention is to check both column 2 and column3. if the values in column 2 and 3 match, the column 1 should be printed.

For example -
if this is the case
1133,/vol/unix,volumeinfo
1155,/vol/unix,inventory

then column 1 should not be printed.

but if this were the case, it should be printed:

1133,/vol/unix,inventory
1155,/vol/unix,inventory

columns are separated by columns

I am assuming that I would need to change this line:

Code
my ($column_1, $column_2) = split /,/;

to

Code
my ($column_1, $column_2, $column_3) = split /,/;


I tried to change the next line to

Code
print {$FH6} "$column_1\n" if (defined $duplicates{$column_2} and defined $duplicates{$column_3});

but this did not lead to the result I needed. It looks like only column2 is being checked.

can someone help?


Code
my %duplicates; 
while (<$FH2>) {
chomp;
my ($column_1, $column_2) = split /,/;
print $column_1;
print {$FH6} "$column_1\n" if defined $duplicates{$column_2};
$duplicates{$column_2}++;
}
close $FH6;
close $FH2;
open my $fh, '<', '/tmp/tst.txt' or die "unable to open file 'file' for reading : $!";
while (my $line = <$fh>) {
#do
print $line;
}
close $fh;



regex2012
User

Jun 8, 2016, 1:07 PM

Post #2 of 4 (1755 views)
Re: [regex2012] How to include another column to check in script [In reply to] Can't Post

actually I just removed the commas from the 3rd column and I didn't need them there, so the script worked. But I would still like to know how to do it with 3 columns.


BillKSmith
Veteran

Jun 8, 2016, 1:51 PM

Post #3 of 4 (1752 views)
Re: [regex2012] How to include another column to check in script [In reply to] Can't Post

Your requirements are not at all clear. Let me guess.

  • Your input file ($FH2) is a .csv file containing three columns. (Does it have a header record?)

  • For each line, you want to print the contents of the first field to $FH6 if the contents of both the second and third fields have appeared previously in the file. (I have no idea if you care whether or not both appeared previously in the same record.) Note: The first occurrence is NOT considered a "match".

  • All code related to $f2 has nothing to do with the question.


  • Your code is close to right if you intend both the second and third field match a previous record. The key to your hash should be a concatenation of the two fields. Otherwise, you have to keep a separate hash for each field.

    UPDATE: Sorry, I overlooked your second post. You basically already found the solution I suggested. I still do not understand your requirements well enough to answer your new question.
    Good Luck,
    Bill

    (This post was edited by BillKSmith on Jun 8, 2016, 1:57 PM)


    Laurent_R
    Veteran / Moderator

    Jun 8, 2016, 3:40 PM

    Post #4 of 4 (1748 views)
    Re: [regex2012] How to include another column to check in script [In reply to] Can't Post

    I agree with Bill that your requirement is not clear.

    The bottom line, however, is that your OP code is rightly populating the hash with column 2:

    Code
    $duplicates{$column_2}++;

    but is not doing it for column 3. So, at the very least, you might need an additional line saying something like:

    Code
    $duplicates{$column_3}++;

    But, depending on your real requirement, maybe it should be another hash for column 3, or maybe you should use a concatenation of columns 2 and 3, or maybe yet something else.

     
     


    Search for (options) Powered by Gossamer Forum v.1.2.0

    Web Applications & Managed Hosting Powered by Gossamer Threads
    Visit our Mailing List Archives