![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| separating entries by using cat command | za_7565 | Shell Programming and Scripting | 7 | 01-29-2008 08:00 AM |
| combining fields in two text fields | shocker | Shell Programming and Scripting | 3 | 01-16-2008 11:27 AM |
| separating filename and extension | lucaspewkas | Shell Programming and Scripting | 2 | 04-06-2007 08:07 AM |
| Separating commands/programs with ; | dush_19 | High Level Programming | 2 | 06-22-2006 06:34 AM |
| separating commands | mile1982 | High Level Programming | 2 | 09-13-2004 12:41 PM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
separating fields
Hi,
i have a file as follows: jonathan:bonus1,bonus2 gerald:bonus1 patrick:bonus1,bonus2 My desired output is jonathan:bonus1 jonathan:bonus2 gerald:bonus1 patrick:bonus1 patrick:bonus2 my current code is cat $F | awk -F"[:,]" how should i continue the code? Can i do something like if NF = 3, print $1 $2\n print $1 $3. is this legal in a awk statement? or its inappropriate to use awk here? |
|
||||
|
Hi futurelet,
i tried to do it using the if way, and i could only managed to do it using 3 lines. The execution time is definitely longer than your suggestion, since i have to open the file 3 times. Is there any way i can modify it into 1 line? I appreciate your 'for' loop, its elegant and achieves the purpose. But i am raw to UNIX script, hoping to learn more ways to do it. Code:
awk 'BEGIN(FS="[:,]"} { if (NF == 3) print $1":"$2)' $F
awk 'BEGIN(FS="[:,]"} { if (NF == 3) print $1":"$3)' $F
awk 'BEGIN(FS="[:,]"} { if (NF == 2) print $1":"$2)' $F
i am looking at something like awk 'BEGIN(FS="[:,]"} { if (NF == 3) print $1":"$2 \n print $1":"$3 \n else print $1":"$2 print)' $F but i got a bunch of syntax errors. awk: cmd. line:1: BEGIN{FS="[:,]"}{if (NF == 2)print $1":"$2\n} awk: cmd. line:1: ^ backslash not last chine |
|
||||
|
oneliner:
Code:
bash> OIFS=$IFS; IFS=: ; while read name rest; do echo ${rest} | tr ',' '\n' | sed s/^/$name\:/g; done <your_data_filename; IFS=$OIFS
Code:
#!/usr/bin/bash
file=your_data_filename
for line in `cat $file`; do
name=`echo $line | cut -d':' -f1`
rest=`echo $line | cut -d':' -f2`
for i in `echo $rest | tr ',' ' '`; do
echo ${name}:${i}
done
done
Code:
#!/usr/bin/bash
file=your_data_filename
for line in `cat $file`; do
name=`echo $line | cut -d':' -f1`
rest=`echo $line | cut -d':' -f2`
echo $rest | tr ',' '\n' | sed s/^/$name\:/g
done
Last edited by stobo; 02-17-2006 at 05:13 PM.. Reason: properly displaying code |
|
||||
|
Hi Stobo, futurelet and Perderabo,
thank you all the the suggestions. One small question thought, as i mentioned earlier, i am relatively new to scripting, how can i improve, to the extend i can come up with the one liners? Will doing more scripting help or are there any references i can refer to ? |
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|