Need help filling in ranges


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Need help filling in ranges
# 1  
Old 12-23-2010
Need help filling in ranges

I have a list of about 200,000 lines in a text file that look like this:

1 1 120
1 80 200
1 150 270
5 50 170
5 100 220
5 300 420

The first column is an identifier, the next 2 columns are a range (always 120 value range)

I'm trying fill in the values of those ranges, and remove duplicate values (the ranges overlap in some cases) and a final format that looks like this:

1:1
1:2
1:3
...
1:270
5:50
5:51
5:52
...
5:420

Thanks for any help!
# 2  
Old 12-23-2010
Assuming that file is sorted..
Code:
awk '{if(!d){a=$1;b=$2;c=$3;getline;}if(a==$1 && c >= $2-1) c=$3; else {for(i=b;i<=c;i++) print a":"i;a=$1;b=$2;c=$3;}d=1;}END{for(i=b;i<=c;i++) print a":"i;}' inputFile

If not sorted..
Code:
cat inputFile | sort -n -k1,1 -k2,2 -k3,3 | awk '{if(!d){a=$1;b=$2;c=$3;getline;}if(a==$1 && c >= $2-1) c=$3; else {for(i=b;i<=c;i++) print a":"i;a=$1;b=$2;c=$3;}d=1;}END{for(i=b;i<=c;i++) print a":"i;}'


Last edited by anurag.singh; 12-23-2010 at 02:15 PM.. Reason: corrected per Scrutinizer's point in post #4
This User Gave Thanks to anurag.singh For This Post:
# 3  
Old 12-23-2010
Thanks - that works perfectly!
# 4  
Old 12-23-2010
I presumed 5:221 to 5:299 should not be printed...
Code:
awk 'v!=$1{v=$1; a=$2; b=$3} $2>a{a=$2} $3>b{b=$3} {for(i=a;i<=b;i++)print v":"i; a=i}' infile

This User Gave Thanks to Scrutinizer For This Post:
# 5  
Old 12-23-2010
yes. right. I didn't notice that. And your logic is much much simpler.
Thanks for providing best possible solutions.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Using awk to get the maximum of a value in two different ranges

Dear Unix gurus, I have sample data organised like this and containing 6 columns (with headers): label c2 c3 c4 c5 c6 where c2 to c6 are numeric values in columns c2 to 6. I am trying to create a simple output in a new file containing 3 columns: label max(c2 c3) max(c4 c5 c6) ... (4 Replies)
Discussion started by: ksennin
4 Replies

2. Shell Programming and Scripting

Print numbers between two number ranges

Hi, I have a list.txt file with number ranges and want to print/save new all.txt file with all the numbers and between the numbers. == list.txt == 65936 65938 65942 && 65943 65945 ... (7 Replies)
Discussion started by: AK47
7 Replies

3. IP Networking

Test for overlapping IP ranges

Greetings folks, I have a rather lengthy list of banned IP ranges in iptables. Initially it was constructed as a rather ad-hoc affair, then later I discovered a site which had IP Block By Country lists, and imported several into iptables. If possible, I'd like to be able to verify if the list... (0 Replies)
Discussion started by: putter1900
0 Replies

4. Shell Programming and Scripting

Values between ranges

Hi, I have two files file1 chr1_22450_22500 chr2_12300_12350 chr1_34500_34550 file2 11000_13000 15000_19000 33000_44000 If the file 1 ranges fall between file2 ranges then assign the value of file2 in column 2 to file1 output: chr2_12300_12350 11000_13000 chr1_34500_34550 ... (7 Replies)
Discussion started by: Diya123
7 Replies

5. UNIX for Dummies Questions & Answers

Problem with ranges of numbers

Good day to everyone! So, let's start :) I have a file with a numbers in some ranges for example: 1 10 49 72 ... and this file need to transform to: 1 2 3 4 (14 Replies)
Discussion started by: shizik
14 Replies

6. Shell Programming and Scripting

Need Help with function that has multiple ranges

I have a problem that I cant figure out what to do in this function i need it to count multiple ranges like 0 10, 5 10, 1 100. I know that my counter needs to be outside the function and that it needs to be set to the lowest numbered positional parameter but thats were I am having trouble if... (6 Replies)
Discussion started by: Emin_Em
6 Replies

7. HP-UX

Help reserving UID ranges?

We have recently merged 2 old systems onto a newer Itanium platform. As part of this work we merged the password files and assigned new UID's beginning from 1000. I have a user add script that admins can use to add a user, however this assigns the next available UIB (in the low 100's) rather than... (3 Replies)
Discussion started by: fulhamfcboy
3 Replies

8. Shell Programming and Scripting

Saving ranges using awk

Hi All, Is there a way to save a range in variable for later printing? for example write somthing like this: awk ' /pattern1/,/pattern2/{f=range} /pattern3/{print f} ' I don't know excatly what "range" could be but is there a way to do this? (8 Replies)
Discussion started by: ghoda2_10
8 Replies

9. Shell Programming and Scripting

date ranges

Hi, Please anyone help to achive this using perl or unix scripting . This is date in my table 20090224,based on the date need to check the files,If file exist for that date then increment by 1 for that date and check till max date 'i.e.20090301 and push those files . files1_20090224... (2 Replies)
Discussion started by: akil
2 Replies

10. HP-UX

Valid ranges for uids for HP-UX

Hi , I am using adduser in hp-ux to create users in Hp-ux. i would like to know what are the valid values for uids and gids in hp-ux what are the rannges for the valid uids . How to check what are the used uids in Hp-ux . Thanks Narendra babu C (7 Replies)
Discussion started by: naren_chella
7 Replies
Login or Register to Ask a Question