Detect continuous number as range


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Detect continuous number as range
# 1  
Old 05-25-2016
Detect continuous number as range

I have 100k data like this bellow , i want to group data to range
Code:
171
172
173
174
175
176
179
182
183
187
188
189
1900
1901
1903
1904
1905
1906
1907

expected output
Code:
171 176
179
182 183
187 189
1900 1901
1903 1907

is possible to use awk?

Last edited by before4; 05-25-2016 at 04:20 AM..
# 2  
Old 05-25-2016
Hello before4,

Not sure how 171 179 is coming as after 176 I couldn't see any thing continuous there. So if that is not the case then following may help you in same.
Code:
awk 'NR==1{Q=T=$0}NR>1{if(($0-Q)==1){q=0;} else {if(T==Q){T=$0;Q=$0;next};print T OFS Q;T=$0;Q=$0;next};Q=$0} END{print T OFS Q}' Input_file

Output will be as follows.
Code:
171 176
182 183
187 189
1900 1901
1903 1907

If above code doesn't help you or you have some other conditions in your requirement please get back to us with more precise Input_file and all the conditions and expected sample Output_file too.
EDIT: Changed code above a bit as it was no coming as per OP's expectation.

Thanks,
R. Singh

Last edited by RavinderSingh13; 05-25-2016 at 04:38 AM.. Reason: Changed code as Pravin pointed out that output was not OP's expectation. Thanks to Pravin.
This User Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 05-25-2016
Work perfect, and good finding for my mistake many thanks
# 4  
Old 05-25-2016
RavinderSingh13,
One doubt here , why 179 183 is in your o/p
o/p in the post of before4 does not include it.
Little modification if you want to exclude 179 183
Code:
awk 'NR==1{first=$0;prev=$0;next }
$0 - prev == 1 { prev=$0; next } { if (first != prev) { print first,prev;} prev=$0;first=$0 } END { print  first,prev;}' infile

Thanks
Pravin
These 2 Users Gave Thanks to pravin27 For This Post:
# 5  
Old 05-25-2016
Quote:
Originally Posted by pravin27
RavinderSingh13,
One doubt here , why 179 183 is in your o/p
o/p in the post of before4 does not include it.
Little modification if you want to exclude 179 183
Code:
awk 'NR==1{first=$0;prev=$0;next }
$0 - prev == 1 { prev=$0; next } { if (first != prev) { print first,prev;} prev=$0;first=$0 } END { print  first,prev;}' infile

Thanks
Pravin
many thanks Pravin,

Is it possible to print 179 as single line,
Code:
171 176
179
182 183
187 189
1900 1901
1903 1907

# 6  
Old 05-25-2016
yes, You can modify code as below.
Code:
awk 'NR==1{first=$0;prev=$0;next }
$0 - prev == 1 { prev=$0; next } { if (first != prev) { print first,prev;} else { print prev} prev=$0;first=$0 } END { print  first,prev;}' infile

# 7  
Old 05-25-2016
Thanks Pravin for pointing out the same.

Hello before4,

Apologies for not being perfect previous time. Could you please try following and let me know if this helps you.
Code:
awk 'NR==1{Q=T=$0}NR>1{if(($0-Q)==1){q=0;} else {if(T==Q){print Q;T=$0} else {print T OFS Q;T=$0}}};{Q=$0} END{print T OFS Q}'  Input_file

Output will be as follows.
Code:
171 176
179
182 183
187 189
1900 1901
1903 1907

EDIT: Also I have edited my previous code too which should give OP's very first expected output.

Thanks,
R. Singh

Last edited by RavinderSingh13; 05-25-2016 at 04:38 AM..
This User Gave Thanks to RavinderSingh13 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Using sed to replace a range of number

Trying to use SED to replace numbers that fall into a range but can't seem to get the logic to work and am wondering if SED will do this. I have a file with the following numbers 3 26 20 5. For the numbers that are greater than zero and less than 25, SED would add the word range after the... (7 Replies)
Discussion started by: jimmyf
7 Replies

2. Shell Programming and Scripting

Generating Random Number in certain range

Hi there I am trying to generate a random number between 40 and 70 using the shell here is my code so far and it keeps going above 70. all help much appreciated! comp=$(( RANDOM%70+40 )) echo $comp (4 Replies)
Discussion started by: faintingquiche
4 Replies

3. Shell Programming and Scripting

Fill data if number range is given

Hi I want to get all numbers if number range is given as input. Eg: INPUT FILE 100-105 107 108-112 OUTPUT REQUIRED: 100 101 102 103 104 105 107 108 109 110 111 112 How can I do it using shell? :confused: Thanks in advance. (11 Replies)
Discussion started by: dashing201
11 Replies

4. Shell Programming and Scripting

If statement test against number range [0-9]

Is it possible to test against a varible within a ranges in a if statement. ex. if ];then echo "not in range" else echo "number within range" fi (8 Replies)
Discussion started by: leemalloy
8 Replies

5. Shell Programming and Scripting

Range of number from 0.1 to 10.0

Is there a way to create a loop that will output number starting from 0.1 to 10.0 0.1 0.2 0.3 0.4 0.5 .. ... 10.0 This is what i tried. for i in {1..50}; do printf -v i '%02d' $i ; echo "$i"; done That will print 01 02 03 .. .. 50 (9 Replies)
Discussion started by: vietrice
9 Replies

6. Shell Programming and Scripting

how can I detect number series range

Hi I have one source file and content of source file as follows; 3 00 3 01 3 02 3 07 3 09 3 10 3 15 3 16 3 17 3 18 3 40 3 45 3 500 3 501 3 502 3 70 3 80 (8 Replies)
Discussion started by: kocaturk
8 Replies

7. Shell Programming and Scripting

Closest Number from a Range of Numbers

out of a range of numbers, how can i pick out the number that is the closest to any arbitrary/random number that a user supplies? say the range of numbers are between 1 - 90000. but that doesn't mean each number exist between 1 - 90000. the range of numbers could be for example: 1, 3, 4, 6,... (6 Replies)
Discussion started by: SkySmart
6 Replies

8. Shell Programming and Scripting

Number range for SSNs

Hi All. I have a file that has an ID Number field....some of the ID Numbers are actual SSNs. ...does anyone know the range that SSNs may be...this is what I have found so far poking around SSN info sites.... greater than 001-01-0000 and less than 770-00-0000. Does anyone know this to be... (1 Reply)
Discussion started by: lyoncc
1 Replies

9. Shell Programming and Scripting

extract number range from a file

Hi Everyone, a.txt 1272904667;1272904737;1 1272904747;1272904819;1 1272904810;1272904857;1 1272904889;1272904926;1 1272905399;1272905406;1 1272905411;1272905422;1 if i want to get the record, when the a.txt 1st field is between 1272904749 and 1272905399, any simple way by using awk,... (1 Reply)
Discussion started by: jimmy_y
1 Replies

10. Shell Programming and Scripting

validate number range

Hi If I want to read user input and want to validate if it is a numeric number in some range of 1-100 what would be the best way? Sabina (5 Replies)
Discussion started by: sabina
5 Replies
Login or Register to Ask a Question