Sort numbers


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sort numbers
# 1  
Old 11-30-2010
Network Sort numbers

Hello,

okey so my script is using 4 variables that are either empty or numbers in the following format:

Code:
NUMBER_1 NUMBER_2 NUMBER_3 NUMBER_4

So they're basically separated by a space and I need to echo the lowest number, so far I've been doing it like this:

Code:
echo "2 3 1 3" | tr " " "\n" | sort -n | head -n1

However the problem is that I need the number 0 as well empty fields excluded.

So with my method the following examples would fail:

Code:
echo "2 3 1 0" | tr " " "\n" | sort -n | head -n1
echo "2 3  1" | tr " " "\n" | sort -n | head -n1
echo "2 3 1 3" | tr " " "\n" | sort -n | head -n1
echo " 3 1 3" | tr " " "\n" | sort -n | head -n1
echo "2 3 1 " | tr " " "\n" | sort -n | head -n1
etc.

I'm sure that one of you guys has a good solution, big thanks in advance!
# 2  
Old 11-30-2010
Code:
% echo '2 3 42  0  10' | 
  perl -le'
    print+(sort{$a<=>$b}grep$_>0,split/ /,<>)[0]
'                               
2


Last edited by radoulov; 12-01-2010 at 04:51 AM..
# 3  
Old 11-30-2010
Here's a brute force way:

Code:
echo " 2 3  3    1 0 " | sed "s/ $//g" | sed "s/^ //g" | tr -s '  ' ' ' | tr " " "\n" | sort -un | egrep -v "0" | head -1
1

Shorter:
Code:
echo " 2 3  3    1 0 " | tr " " "\n" | egrep -v "^ *$|0" | sort -un | head -1
1


Last edited by purdym; 11-30-2010 at 06:18 PM.. Reason: Better code.
# 4  
Old 11-30-2010
Would be nice if someone had a non perl solution. Just bash/sad/awk/sort etc.

Edit:

Thanks purdym Smilie
# 5  
Old 11-30-2010
Code:
echo "0 2 3 5 0 8 1" | awk '{for(i=0;++i<=NF;){x=((!x && $i>0)?$i:($i>0 && $i<x)?$i:x)}}END{print x}'

# 6  
Old 11-30-2010
Any tool with associative arrays implicitly can sort internally, like ksh93. But you just want the max:
Code:
Inline code:
 
zmax=
 
for n in 9 2 3 8 7
do
  if [ "$zmax" = "" ]
  then
    zmax=$n
    continue
  fi
 
  if (( $n > $zmax ))
  then
    zmax=$n
  fi
done
 
echo $zmax
 
 
or as a function;
 
 
max(){
  zmax=$1
  shift
 
  while [ $# != 0 ]
  do
    if (( $1 > $zmax ))
    then
      zmax=$1
    fi
    shift
  done
 
  echo $zmax
}

# 7  
Old 11-30-2010
Quote:
Originally Posted by danmero
Code:
echo "0 2 3 5 0 8 1" | awk '{for(i=0;++i<=NF;){x=((!x && $i>0)?$i:($i>0 && $i<x)?$i:x)}}END{print x}'

Thanks buddy I'm going to use your way, seems to be most effective.

You guys are great help Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sort only numbers within a string

Hi, I am having contents in a file like below, cat testfile rpool/swap rpool/swap14 rpool/swap2 rpool/swap3 I want to sort the above contents like, rpool/swap rpool/swap2 rpool/swap3 rpool/swap14 I have tried in this way, (7 Replies)
Discussion started by: Sumanthsv
7 Replies

2. Shell Programming and Scripting

Sort strings containing numbers

How can I sort this, first by 2nd field then by 1st field. tried sort -b -k 2,2 Input: AS11 AB1 BD34 AB10 AF12 AC2 A345 AB10 R134 AB2 456 AC10 TTT2 BD12 desired output: AS11 AB1 R134 AB2 A345 AB10 BD34 AB10 AF12 AC2 456 AC10 TTT2 BD12 (2 Replies)
Discussion started by: aydj
2 Replies

3. Shell Programming and Scripting

Sort strings with numbers

I want to sort my data first by the 2nd field then by the first field. I can't use sort -V because I don't have gnu sort and cannot install one. How do I go about this? Input: G456 KT1 34 K234 KT10 45 L2 KT2 26 H5 LAF2 28 F3 LAF2 36 Output: G456 KT1 34 L2 KT2 26 K234 KT10 45 F3... (14 Replies)
Discussion started by: aydj
14 Replies

4. Shell Programming and Scripting

Sort based on numbers

I have a file which has the following data :- how can I sort the data in descending order . My files may have the first column with 1 to 10000 numbers .I need to arrange them in descending order . Thanks (2 Replies)
Discussion started by: lazydev
2 Replies

5. Shell Programming and Scripting

how to sort numbers

I have files like this: 1 3 4 6 14 3 6 I want to extract the highest number. I have tried using cat filename | sort but then 9 would become higher than 14. So how do I sort? (1 Reply)
Discussion started by: locoroco
1 Replies

6. Shell Programming and Scripting

How to sort version numbers?

I would like to know how to sort version numbers, using bash or perl. I would like to sort file names that are program names with version numbers and extensions, such as hello-0.2.3.tar.gz and hello-0.10.3.tar.gz. Version numbers of computer programs do not comply with the mathematical rule... (3 Replies)
Discussion started by: LessNux
3 Replies

7. Shell Programming and Scripting

Is it Possible to sort a list of hexadecimal numbers using "sort" command?

Hello Everybody :) !!!. i have question in mind, is it possible to sort a list of hexadecimal numbers using "sort" command? (9 Replies)
Discussion started by: Kesavan
9 Replies

8. UNIX for Dummies Questions & Answers

Trying to sort words and numbers associated with them.

Hi. I have a file containing words and numbers associated with them as follows - c 2 b 5 c 5 b 6 a 10 b 16 c 18 a 19 b 21 c 27 a 28 b 33 a 76 a 115 c 199 c 251 a 567 a 1909 (4 Replies)
Discussion started by: maq
4 Replies

9. Shell Programming and Scripting

How to Sort Floating Numbers Using the Sort Command?

Hi to all. I'm trying to sort this with the Unix command sort. user1:12345678:3.5:2.5:8:1:2:3 user2:12345679:4.5:3.5:8:1:3:2 user3:12345687:5.5:2.5:6:1:3:2 user4:12345670:5.5:2.5:5:3:2:1 user5:12345671:2.5:5.5:7:2:3:1 I need to get this: user3:12345687:5.5:2.5:6:1:3:2... (7 Replies)
Discussion started by: daniel.gbaena
7 Replies

10. Shell Programming and Scripting

Sort by numbers, then alphabetically

Hey guys, I have a file that contains the following: 366 K 364 Q 12 UB 7 INC. P 4 Law 2 LAMB 2 High 1 QEG 1 OF 1 LC 1 B As you can see, it's already sorted by numerical order, how do I sort it again, breaking the ties by using the alphabetical order of the second column, but... (2 Replies)
Discussion started by: Andrew9191
2 Replies
Login or Register to Ask a Question