split into an array?, ksh, awk version

How do you split a ksh shell variable into an array with awk?  

Perl version would be
@a = split /:/, $ENV{'PATH'}.

Thanks
LVL 1
hank1Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
ahoffmannConnect With a Mentor Commented:
ok, then we need to do it in 2 steps as you suggested, tr only can't do it, but awk

   set -A dirs `echo "$PATH"|awk -F: '{for(i=1;i<=NF;i++){printf" '"'"'%s'"'"'",$i}}'`

# ugly, but you asked for it ;-)
0
 
bpmurrayCommented:
This should do it:

{
      path = ENVIRON["PATH"];
      cnt = split(path, dir, ":");

      for (i=0; i<cnt; i++)
            print dir[i];
}
0
 
hank1Author Commented:
I know this is wrong, but I want the array outside of awk.  Is the awk
struct even close?  :-)
Thanks  (I couldn't get your script to run since I don't know, really
don't know, awk.  I guessed at an invoke of just awk .... no.)



awk {
   path = ENVIRON["PATH"];
   cnt = split(path, dir, ":");
}

while [ ${cnt[index]} ] ; do
  echo Here's the element ${cnt[index]}
  index=$((index + 1))
}
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
hank1Author Commented:
Here's something I found, but it uses a file.  Tried your ENVIRON["PATH"] but didn't
go.  Wanted a file



Fiddling with IFS should have helped, though you also want to
double-quote the @ expansion in the for loop's control section:
  oIFS=$IFS
  IFS=${IFS#??}
  set -A array $(awk -F: '{print $3}' go.dat)
  IFS=$oIFS
  for job in "${array[@]}"; do
     echo "$job"
  done

0
 
bpmurrayCommented:
It really depends on what you want to do with the array. Do you simply want to populate a shell array with the contents of PATH? In any case, to run awk the usual way is: awk -f scriptfile [datafile]
0
 
bpmurrayCommented:
I think it's easier to do it in the shell directly. From your use of set -A, I presume you're using ksh, so you can use:

#!/bin/ksh
# Set directory names into "dirs", but set spaces to "+" first
set -A dirs `echo $PATH | tr " " "+" | tr ":" " "`
i=0
while [ ! -z "${dirs[$i]}" ]
do
        # change the "+" to spaces
      dir=`echo ${dirs[$i]} | tr "+" " "`
      echo $dir
      i=`expr $i + 1`
done
0
 
ahoffmannCommented:
what's wrong with:
   set -A dirs `echo "$PATH"|tr ':' ' '`
# assuming that there is space in the path anywhere, which is unusal in Unix anyway
0
 
bpmurrayCommented:
There are spaces in the path - that's the problem. As you've noted, it's easy with no spaces :-)
0
 
ahoffmannCommented:
hmm, who said that there are spaces?
0
 
bpmurrayCommented:
0
 
hank1Author Commented:
Yep, works like a champ.  I'll have to dip into this awk some day.  Thanks.
0
 
hank1Author Commented:
strings windup with enclosed with 's.  
0
All Courses

From novice to tech pro — start learning today.