Improve company productivity with a Business Account.Sign Up

x
?
Solved

Join, Sequence Number, and Two Ouputs

Posted on 2000-04-04
6
Medium Priority
?
321 Views
Last Modified: 2010-03-05
You have an input file with over a million lines like so :

0998|1999|1000|ATL|SEA|H|USAIR|2725|3002|0845


The first ouput file:

Assigns a sequence number to each line that is unique, combines the first three fields into one, only uses the last two digits of field 2, defaults the ouput of 2 to 99 if is is blank, puts a "_" after field 2, and also prints out field 6.

For example:

the above line would be:

00000001|099899_1000|USAIR


The second output file assigns a sequence number if fields 4,5,6,7,8,9,10 are unique.

For example the ouput would be:

00000001|ATL|SEA|H|USAIR|2725|3002|0845


How would u write this in perl

Any help appreciated:

Thanks
0
Comment
Question by:tomatocans
  • 3
  • 2
6 Comments
 

Author Comment

by:tomatocans
ID: 2686042
Adjusted points from 25 to 50
0
 
LVL 85

Expert Comment

by:ozo
ID: 2686066
$sequence='0000000';
while( <> ){
  @field=split/\|/;
  print join'|',$sequence++,$field[0].substr($field[1]||99,-2)."_$field[2]","$field[6]\n";
}
0
 
LVL 5

Accepted Solution

by:
PC_User321 earned 200 total points
ID: 2686768
First file (based on ozo's post):

$sequence='0000001';
while( <> ){
  unless (defined($CheckDup{$_})) {
    $CheckDup{$_} = 1;
    @field=split/\|/;
    print join'|',$sequence++,$field[0].substr($field[1]||99,-2)."_$field[2]","$field[6]\n";
  }
}

Second file:
$sequence='0000001';
while( <> ){
  $Line = $_;
  $Line =~ s/^(.*?\|){3}//;
  unless (defined($CheckDup{$Line})) {
    $CheckDup{$Line} = 1;
    print $sequence++ . "|$Line";
  }
}

0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
LVL 5

Expert Comment

by:PC_User321
ID: 2687917
BTW tomatocans, many of your questions remain ungraded.
I suggest you go through all your questions and awards points to people who have given correct answers/comments, or if no one is correct, then delete the question or add more information.
0
 
LVL 5

Expert Comment

by:PC_User321
ID: 2687943
My solutions can be streamlined slightly:

In each script the two lines in the form of
     unless (defined($CheckDup{$Line})) {
    $CheckDup{$Line} = 1;
   
can be replaced with
  unless (++$CheckDup{$Line} > 1) {
   
0
 

Author Comment

by:tomatocans
ID: 2688142
Thanks
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

I've just discovered very important differences between Windows an Unix formats in Perl,at least 5.xx.. MOST IMPORTANT: Use Unix file format while saving Your script. otherwise it will have ^M s or smth likely weird in the EOL, Then DO NOT use m…
A year or so back I was asked to have a play with MongoDB; within half an hour I had downloaded (http://www.mongodb.org/downloads),  installed and started the daemon, and had a console window open. After an hour or two of playing at the command …
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Six Sigma Control Plans

595 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question