![]() |
Hello and Welcome from to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !! |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Splitting file based on number of rows | wahi80 | Shell Programming and Scripting | 2 | 06-03-2008 10:38 PM |
| Splitting a file based on the records in another file | er_ashu | Shell Programming and Scripting | 2 | 05-12-2008 05:34 PM |
| splitting a record and adding a record to a file | rsolap | Shell Programming and Scripting | 1 | 08-13-2007 02:58 PM |
| splitting files based on text in the file | matrix1067 | Shell Programming and Scripting | 1 | 01-30-2006 08:45 PM |
| Splitting a file based on some condition and naming them | srivsn | Shell Programming and Scripting | 1 | 12-07-2005 11:27 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Splitting a file based on record sin another file
All,
We receive a file with a large no of records (records can vary) and we have to split it into two files based on another file. e.g. File1: UHDR 2008112 "25187","00000022","00",21-APR-1991,"" ,"D",-000000519,+0000000000,"C", ,+000000000,+000000000,000000000,"2","" ,21-APR-1991 "8Y3H4","0000004H","00",16-APR-1992,"" ,"H",-001621119,+0000000000,"C", ,+000000000,+000000000,000000000,"2","" ,21-APR-1991 "95Y8U","02100971","00",03-MAR-1991,"" ,"H",-000004499,+0000000000,"" , ,+000000000,+000000000,000000000,"2","US",21-APR-1991 "24567","02100973","00",26-SEP-1991,"" ,"H",-000000362,+0000000000,"" , ,+000000000,+000000000,000000000,"2","US",21-APR-1991 -- -- -- UTRL 00144700 File2: 2518720080512 2456720080512 1256720080512 8WE7820080512 8Y3H020080512 8Y3H220080512 8Y3H420080512 8Y3H620080512 - -- -- -- If the first 5 characters of file 2 matched with the chars 2-6 in file1, it should separate those records and put them into another file and rest of the records should be copied into a second file. I tried cut command but as the file1 is quite large, it was taking a lot of time to put the values into a variable and then compare it. Is there a way which can do the above task quite fast. Please help as it is needed urgently. Thanks in anticipation. |
|
||||
|
If your grep can read patterns from a file (like GNU grep), try something like this.
Code:
cut -c1-5 file2 >patterns grep -f patterns file1 >matches grep -f patterns -v file1 >nonmatches Code:
sed 's/^\(.....\).*/^"\1",/' file2 >patterns Last edited by era; 05-13-2008 at 04:28 AM.. Reason: Explain revised patterns |
|
||||
|
Thanks Franklin and era.
Franklin, I fpossible, can you explain wha tthe cod eis doing. I'm an awk novice and this will help me in interpreting things better. Also, what do I do if I don't want to modify the original files. Thanks again. |
|
||||
|
Code:
awk 'NR==FNR{a[substr($0,1,5)];next}
Code:
NF<3{next}
Code:
substr($1,2,5) in a {print > "file1";next}
Code:
{print > "file2"}
The original files should not change. Regards Last edited by Franklin52; 05-13-2008 at 02:03 PM.. Reason: linguistic correction |
|
||||
|
Franklin,
You rock. But when I use this: Code:
awk 'NR==FNR{a[substr($0,1,5)];next}
NF<3{next}
substr($1,2,5) in a {print > "matched.txt";next}
{print > "notmatched.txt"}' file2 file1
|
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|