Erick Perez wrote: > Hi, > i need to extract some information from the /etc/passwd file to be > used as a command input in a mail software. My /etc/passwd looks like: > k.thomas:x:1918:100:Kimaura Thomas:/home/users/k.thomas:/bin/usersh > My main issue here is that the fifth field contains spaces and spanish > chars with accent. I currently do not posess the skill to understand > how to use cut to extract all the field. > So far, cut returns the name up to the space, so in this case it will > return Kimaura and not Kimaura Thomas. > Can you please point me to internet examples of tools (sed, awk, grep > or cut) that will help me accomplish this, or maybe provide the code? > > And here is the code (not the best...im still learninng..) > #!/bin/bash > # Passwd to Zimbra import > # This script modifies the displayName field in the Zimbra mailserver > # This script will parse /etc/passwd and extracts field 1 and field 5 > # field 1 is the username. > # field 5 is the name in long format of the username > # > # domain="oj.gob.pa" > # file="zimbranames.file" > # x=0 > # echo ''>$file > # > # for linia in `cat /etc/passwd` > # do > # user=`echo $linia|cut -f1 -d":"` > # nombre=`echo $linia|cut -f5 -d":"` > # echo "zmprov ma $user@$domain displayName $nombre">>$file > # x=$[x+1] > # done > # echo "$x accounts exported to \"$PWD/$file\"" > # sleep 5 > > Thanks in advance. > You should be able to do this easily with awk. Look at the -F option for defining fields. The follow command line will pluck field 1 and field 5 from your example. $ echo "k.thomas:x:1918:100:Kimaura Thomas:/home/users/k.thomas:/bin/usersh" | awk -F : '{ print $1", "$5 }' Or, in your script . . . user=echo $linea | awk -F : '{ print $1 }' nombre=echo $linea | awk -F : '{ print $5 }' . . . That's about as inelegant as it comes but it should be easy to understand. There is a fantastic (g)awk manual at http://www.gnu.org/software/gawk/manual/ presented in a number of formats.