Performance problem with removing duplicates in a huge file (50+ GB)


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Performance problem with removing duplicates in a huge file (50+ GB)
# 1  
Old 01-04-2013
Performance problem with removing duplicates in a huge file (50+ GB)

I'm trying to remove duplicate data from an input file with unsorted data which is of size >50GB and write the unique records to a new file.

I'm trying and already tried out a variety of options posted in similar threads/forums. But no luck so far..

Any suggestions please ?

Thanks !!

Last edited by Kannan K; 01-07-2013 at 06:20 AM..
# 2  
Old 01-04-2013
The problems are:

Using associative arrays in awk can use lots of memory for a file that large, so it may not work well. If the key(s) are a small size you might get it to work. And awk is really good for this application.

Please post a few records from the big file and carefully define the columns or keys you use to detect duplicates.
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 01-04-2013
The sort -u has less scaling difficulty than associative arrays in a shell. If the order of lines is important, number them first, then sort out the duplicates, then sort it back to original order and then remove numbering. The sort will save the first of any duplicates.

JAVA and C++ PPIs like RogueWave H++ have the same associative array functionality, more accurately called a hash map container. The file could be mmap64() mapped to the program so the hash map just has hash keys and offsets. The clean file could be recreated or even updated in place and truncated with fcntl(). The shell has noticably more overhead. Big jobs often need sharper tools.

Last edited by DGPickett; 01-04-2013 at 04:53 PM..
This User Gave Thanks to DGPickett For This Post:
# 4  
Old 01-07-2013
Sample Records

Sample records from file:

Code:
14480020180,A20180,A020180,143245765381,A00062,17284171796 
14480020180,A20180,A020180,143245765381,A00062,17284171796 
14480000127,A00127,A000127,143245730649,A00127, 
14480020180,A20180,A020180,143245765381,A00062,17284171796 
14480000127,A00127,A000127,143245730649,A00127, 
14480020180,A20180,A020180,143245765381,A00062,17284171796 
14480042302,A42302,A000127,143245800913,A00127, 
14480020180,A20180,A020180,143245765381,A00062,17284171796 
14480041999,A41999,A000127,143245801337,A00127, 
14480020180,A20180,A020180,143245765381,A00062,17284171796 
14480000163,A00163,A000163,143245730774,A00163,4133403 
14480042302,A42302,A000127,143245800913,A00127,

Desired Output:-
Code:
14480020180,A20180,A020180,143245765381,A00062,17284171796 
14480000127,A00127,A000127,143245730649,A00127, 
14480000163,A00163,A000163,143245730774,A00163,4133403 
14480041999,A41999,A000127,143245801337,A00127, 
14480042302,A42302,A000127,143245800913,A00127,

I also want to add the fact that this file contains 40-50% (20-25 GB) of duplicate records.
And unfortunately, all columns need to considered as part of the key to determine duplicates.

The order of the data (sorted/unsorted) in the resultant file doesn't matter. Only the removal of duplicates is essential.
# 5  
Old 01-07-2013
As is, the data is going to be very difficult to manage.

My suggestion would be to try transforming the data into something more suitable for sort -u, then transforming it back after.
# 6  
Old 01-07-2013
Any DBAs around with some spare disk space?

Use a DB server. Create a single column table with a unique index on that column. Insert each line as a row into the table, ignoring duplicate entry failures. Export the data.

Might not be super fast, but it'll be faster than any script. And it's easy.
These 2 Users Gave Thanks to achenle For This Post:
# 7  
Old 01-07-2013
I don't think there is a super-fast way to handle 50G of data.

Taking advantage of a database index sounds as good a way as any, a proper DB is designed to duplicate-check data larger than memory.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Removing White spaces from a huge file

I am trying to remove whitespaces from a file containing sample data as: 457 <EOFD> Mar 1 2007 12:00:00:000AM <EOFD> Mar 31 2007 12:00:00:000AM <EOFD> system <EORD> 458 <EOFD> Mar 1 2007 12:00:00:000AM<EOFD>agf <EOFD> Apr 20 2007 9:10:56:036PM <EOFD> prodiws<EORD> . Basically these... (11 Replies)
Discussion started by: amvip
11 Replies

2. Shell Programming and Scripting

Removing duplicates from new file

i hav two files like i want to remove/delete all the duplicate lines in file2 which are viz unix,unix2,unix3.I have tried previous post also,but in that complete line must be similar.In this case i have to verify first column only regardless what is the content in succeeding columns. (3 Replies)
Discussion started by: sagar_1986
3 Replies

3. Shell Programming and Scripting

Removing duplicates from new file

i hav two files like i want to remove/delete all the duplicate lines in file2 which are viz unix,unix2,unix3 (2 Replies)
Discussion started by: sagar_1986
2 Replies

4. UNIX for Dummies Questions & Answers

Removing duplicates from a file

Hi All, I am merging files coming from 2 different systems ,while doing that I am getting duplicates entries in the merged file I,01,000131,764,2,4.00 I,01,000131,765,2,4.00 I,01,000131,772,2,4.00 I,01,000131,773,2,4.00 I,01,000168,762,2,2.00 I,01,000168,763,2,2.00... (5 Replies)
Discussion started by: Sri3001
5 Replies

5. HP-UX

Performance issue with 'grep' command for huge file size

I have 2 files; one file (say, details.txt) contains the details of employees and another file (say, emp.txt) has some selected employee names. I am extracting employee details from details.txt by using emp.txt and the corresponding code is: while read line do emp_name=`echo $line` grep -e... (7 Replies)
Discussion started by: arb_1984
7 Replies

6. Shell Programming and Scripting

formatting a file and removing duplicates

Hi, I have a file that I want to change the format of. It is a large file in rows but I want it to be comma separated (comma then a space). The current file looks like this: HI, Joe, Bob, Jack, Jack After I would want to remove any duplicates so it would look like this: HI, Joe,... (2 Replies)
Discussion started by: kylle345
2 Replies

7. Shell Programming and Scripting

Removing Duplicates from file

Hi Experts, Please check the following new requirement. I got data like the following in a file. FILE_HEADER 01cbbfde7898410| 3477945| home| 1 01cbc275d2c122| 3478234| WORK| 1 01cbbe4362743da| 3496386| Rich Spare| 1 01cbc275d2c122| 3478234| WORK| 1 This is pipe separated file with... (3 Replies)
Discussion started by: tinufarid
3 Replies

8. Shell Programming and Scripting

Removing duplicates from log file?

I have a log file with posts looking like this: -- Messages can be delivered by different systems at different times. The id number is used to sort out duplicate messages. What I need is to strip the arrival time from each post, sort posts by id number, and reattach arrival time to respective... (2 Replies)
Discussion started by: Ilja
2 Replies

9. UNIX for Dummies Questions & Answers

removing duplicates of a pattern from a file

hey all, I need some help. I have a text file with names in it. My target is that if a particular pattern exists in that file more than once..then i want to rename all the occurences of that pattern by alternate patterns.. for e.g if i have PATTERN occuring 5 times then i want to... (3 Replies)
Discussion started by: ashisharora
3 Replies

10. UNIX for Dummies Questions & Answers

removing duplicates from a file

i have a file with some 1000 entries it will contain entries like 1000,ram 2000,pankaj 1001,rahim 1000,ram 2532,govind 2000,pankaj 3000,venkat 2532,govind what i want is i want to extract only the distinct rows from this file so my output should contain only 1000,ram... (2 Replies)
Discussion started by: trichyselva
2 Replies
Login or Register to Ask a Question