Extract numbers from a string and store in variables

Hi All,

Is it possible in Unix shell script to extract numbers from a string containing ".", such as;

5.2.314

And store in variables so;

var1 = 5
var2 = 2
var3 = 314

Thanks in advance for any help anyone can provide

dave

With zsh:

zsh-4.3.4% s="5.2.314"
zsh-4.3.4% a=(${(s:.:)s})
zsh-4.3.4% print $a[1]
5
zsh-4.3.4% print $a[3]
314

With ksh93/bash:

bash 3.2.25(1)$ s="5.2.314"
bash 3.2.25(1)$ set -- ${s//./ }
bash 3.2.25(1)$ echo $1
5
bash 3.2.25(1)$ echo $3
314

More rustic, more complicated, but running anywere I think :rolleyes: :

#!/bin/ksh

a="5.2.314"
i=1

while [ "$a" != "" ]
do
        x[$i]=$(echo $a | cut -d. -f1)
        typeset x$i=${x[$i]}
        ((i=i+1))
        a=$(echo $a | cut -s -d. -f2-)
done

echo "x1=$x1, x2=$x2, x3=$x3"

#!/bin/ksh

str="5.2.314"

Var1=`echo $str | awk -F\. '{print $1}'`
Var2=`echo $str | awk -F\. '{print $2}'`
Var3=`echo $str | awk -F\. '{print $3}'`

echo "$Var1 $Var2 $Var3"

enjoy :slight_smile:

1 Like

Hi,

CODE:

echo 5.2.3.314 | awk 'BEGIN{FS="."}
{
for (i=1;i<=NF;i++)
print "var"i"="$i
}'

OUTPUT:

var1=5
var2=2
var3=3
var4=314

In a script (ksh):

i=1
echo 5.2.314 | sed 's/\./ /g' | while read n
do
echo "var$i = $n"
let i=i+1
done

Thank you very much everybody for your help!