Awk Help

I am trying to transform an LDAP entry that looks like this:

/cn=Printer1/ou=HR/dc=N/A/dc=fabrikam/dc=com

I am using an awk script and am having a bit of trouble so any help is appreciated.

I am specifically trying to escape the "/" in dc=N/A so that it is quoted like dc="N/A". Actually, I would like to quote everything that is between the "=" and the next "/", so it looks like this.

/cn="Printer1"/ou="HR"/dc="N/A"/dc="fabrikam"/dc="com"

Becasue another issue I am having is related to spaces to the right of the "=".

For example:

/cn=Printer1 Building 1/ou=HR/dc=N/A/dc=fabrikam/dc=com

My algorithm - right now - is to split the parts into an array at the "=". If the array part contains more than one slash quote the whole thing then print the array part out.

Here is what I have so far:

#!/usr/bin/ksh

#DN=/cn=Printer1 Building 1/ou=HR/dc=N/A/dc=fabrikam/dc=com
DN=/cn=Printer1/ou=HR/dc=N/A/dc=fabrikam/dc=com

# Get the number of "=" in the DN and add 1 for the last segment
echo $DN|sed 's/\=/ EQUALS /g'|tr ' ' '\012'|sort|uniq -c|grep EQUALS>count

# this needs to be fixed to include # > 9 - works for now
VAL="$(cut -c4 count)"
VAL=$((VAL+1))

echo $DN | awk -v val=$VAL '{split($1, dnstring, "=");
for (i = 1; i <= val; i++)
print dnstring[i]}'
exit 0

As I have said, any help and/or advice is appreciated.

Thanks

Here's a start:

#!/usr/bin/ksh

for DN in "/cn=Printer1/ou=HR/dc=N/A/dc=fabrikam/dc=com" "/cn=Printer1 Building 1/ou=HR/dc=N/A/dc=fabrikam/dc=com"
do
    print "$DN"
    print "$DN" | nawk -F/ '{
        for (i=2; i<=NF; i++) {
            if (i <= (NF-1) && match($(i+1),"=")==0) {
                print $i"/"$(i+1)
                i++
            }
            else
                print $i
        }
    }'
    print
done
exit 0

This script works for both of your strings to build a list of values.

Awk:

BEGIN { FS = OFS = "=" ; q = "\"" }
{ $NF = q $NF q
  for (i=2; i<NF; i++ )
  { match( $i, /.*\// )
    $i = q substr($i,1,RLENGTH-1) q substr($i,RLENGTH)
  }
  print
}

Thank you very much tmarikle for your suggestions and help. I did have a minor problem with the quotes following the slash in the string per your suggestion, but resolved that. Once again - thank you to all who helped.

Here is my final function - for posterity's sake.

#--------------------------------
# function _quoteDN
#
# Purpose: Takes DN input and quotes the DN string values.
# 	   This function was designed specifically to handle a "/" within a value.
# 		
# Example input: /cn=Printer1 Building 1/ou=HR/dc=N/A/dc=fabrikam/dc=com
#        output: /cn="Printer1 Building 1"/ou="HR"/dc="N/A"/dc="fabrikam"/dc="com"
#
#-----------------------------------

function _quoteDN () {

      DN="$@"
      print "$DN" | awk -F/ '
      BEGIN {
         PLINE=""
         gsub(/"/,"") 	
      }
      {
        for (i=2; i<=NF; i++) {
            if (i <= (NF-1) && match($(i+1),"=")==0) {
			gsub(/=/, "=\"", $i)
			PLINE = PLINE "/" $i"/"$(i+1) "\"" 
		$(i+1)=""
		i++
   		}
            else 
		gsub(/=/, "=\"", $i)
       		if ($i != "") {
			PLINE = PLINE "/" $i "\""
		}
		else 
			PLINE = PLINE $i 
    	    	}
	}
	END { echo PLINE }'
return
}

just a little suggestion if I may...
next time you post code, pls use the

'' and ' 

tags - it makes the code more readable - I've edited your post to ease the reading.