Comparing values in 2 textfiles and returning the missing values

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Jorgen Gustafsson

    Comparing values in 2 textfiles and returning the missing values

    Hi,
    im trying to write a small progam to compare data in 2 textfiles.

    I want to search for values that doesnt exist in File2.
    The result should be "3" in the example below but Im not
    able to do this since my program crosschecks all numbers in
    both files and Im getting a lot of "hits". (outer and inner while-loops)


    Below is an examples of the textfiles:

    File1.txt File2.txt
    1 1
    2 2
    3 4
    4 5
    5 6
    7
    8
    9
    10

    Thanks in advance...!
    Jorgen
  • Jim Gibson

    #2
    Re: Comparing values in 2 textfiles and returning the missing values

    In article <q24htvoi05qd8t 9feuf979rmkritr rrtq8@4ax.com>, Jorgen
    Gustafsson <jorgen.xi.gust afsson@ericsson .com> wrote:
    [color=blue]
    > Hi,
    > im trying to write a small progam to compare data in 2 textfiles.
    >
    > I want to search for values that doesnt exist in File2.
    > The result should be "3" in the example below but Im not
    > able to do this since my program crosschecks all numbers in
    > both files and Im getting a lot of "hits". (outer and inner while-loops)
    >
    >
    > Below is an examples of the textfiles:
    >
    > File1.txt File2.txt
    > 1 1
    > 2 2
    > 3 4
    > 4 5
    > 5 6
    > 7
    > 8
    > 9
    > 10
    >
    > Thanks in advance...!
    > Jorgen[/color]

    If you have a program written, it is best to include that in your post.

    If your files are short enough, you can try reading file 2 first and
    creating a hash with the values from file 2 as keys (the value of the
    hash doesn't matter, so set it to 1 or increment to get a count). Then,
    read file 1 and see if the corresponding keys exist in your hash.

    Here's a quick sample program (with two files appended and separated by
    a BREAK line):

    #!/opt/perl/bin/perl

    use strict;
    use warnings;

    my %seen;
    while(<DATA>) {
    chomp;
    last if /BREAK/;
    $seen{$_}++;
    }

    while(<DATA>) {
    chomp;
    if( ! $seen{$_} ) {
    print "$_ not in file 1\n";
    }
    }

    __DATA__
    1
    2
    4
    5
    6
    7
    8
    9
    10
    BREAK
    1
    2
    3
    4
    5

    __OUTPUT__
    3 not in file 1

    FYI: This newsgroup is defunct. Try comp.lang.perl. misc in the future
    for better response.

    Comment

    • Jürgen Exner

      #3
      Re: Comparing values in 2 textfiles and returning the missing values

      Jorgen Gustafsson wrote:[color=blue]
      > Hi,
      > im trying to write a small progam to compare data in 2 textfiles.
      > I want to search for values that doesnt exist in File2.[/color]

      perldoc -q difference:
      "How do I compute the difference of two arrays? How do I compute the
      intersection of two arrays?"

      While the solution is written for arrays, it is trivial to modify it for
      files.

      jue


      Comment

      • Eric J. Roode

        #4
        Re: Comparing values in 2 textfiles and returning the missing values

        Jorgen Gustafsson <jorgen.xi.gust afsson@ericsson .com> wrote in
        news:q24htvoi05 qd8t9feuf979rmk ritrrrtq8@4ax.c om:
        [color=blue]
        > Hi,
        > im trying to write a small progam to compare data in 2 textfiles.
        >
        > I want to search for values that doesnt exist in File2.
        > The result should be "3" in the example below but Im not
        > able to do this since my program crosschecks all numbers in
        > both files and Im getting a lot of "hits". (outer and inner while-loops)[/color]

        If you're on a unix-like system, you can use the 'comm' utility for this.

        --
        Eric
        $_ = reverse sort $ /. r , qw p ekca lre uJ reh
        ts p , map $ _. $ " , qw e p h tona e and print

        Comment

        • Jorgen Gustafsson

          #5
          Re: Comparing values in 2 textfiles and returning the missing values

          Hi, thanks for all help!

          Found a link to a perl-module that seems to do the job for me in comp.lang.perl. misc.
          (diff and sdiff)


          /Jorgen


          On Thu, 11 Dec 2003 16:58:04 +0100, Jorgen Gustafsson <jorgen.xi.gust afsson@ericsson .com> wrote:
          [color=blue]
          >Hi,
          >im trying to write a small progam to compare data in 2 textfiles.
          >
          >I want to search for values that doesnt exist in File2.
          >The result should be "3" in the example below but Im not
          >able to do this since my program crosschecks all numbers in
          >both files and Im getting a lot of "hits". (outer and inner while-loops)
          >
          >
          >Below is an examples of the textfiles:
          >
          >File1.txt File2.txt
          >1 1
          >2 2
          >3 4
          >4 5
          >5 6
          > 7
          > 8
          > 9
          > 10
          >
          >Thanks in advance...!
          >Jorgen[/color]

          Comment

          Working...