Any solution with awk for volatile columns??

Hi

I have this file with content

ale,4   ,ale,2  ,ale,1  ,ale,2
ale,1   ,ale,7  ,ale,7  ,ale,13
ale,6   ,ale,1  ,ale,1  ,ale,1
ale,1   ,ale,1  ,ale,37 ,ale,1
ale,1   ,ale,1  ,ale,2  ,ale,37
ale,77  ,ale,1  ,ale,53 ,ale,3
ale,5   ,ale,1  ,ale,2  ,ale,40
ale,1   ,ale,1  ,ale,44 ,ale,1
ale,117 ,ale,4  ,ale,1  ,ale,1
ale,2   ,ale,1  ,ale,5  ,ale,2

[/CODE]

I wanted first column to be selected by default and den all the numeral columns i.e. column 2,4,6,8.

Major issue is the columns are volatile....
i.e. everyday there is one more script of mine which will add columns i.e. paste columns...
plzzzz help!!!!

Can you give example on how you like the output.
Why not edit the original script that create this file

to give it output you like directly?

ale,4   ,2      ,1      ,2
ale,1   ,7      ,7      ,13
ale,6   ,1      ,1      ,1
ale,1   ,1      ,37     ,1
ale,1   ,1      ,2      ,37
ale,77  ,1      ,53     ,3
ale,5   ,1      ,2      ,40
ale,1   ,1      ,44     ,1
ale,117 ,4      ,1      ,1
ale,2   ,1      ,5      ,2

[/CODE]

Above mentioned is the required o/p...
one more thing is the columns are volatile dey are not fixed.....
i.e i wan the 1st column by default and den i want all the even columns i.e 2,4,6,8..... goes on

awk -F, '{ s=$1;for(i=2;i<=NF;i++){ s=($i~/^[0-9]+/)?s FS $i:s; } print s }' filename

Or for even columns:

awk -F, '{ s=$1;for(i=2;i<=NF;i+=2) s=s FS $i; print s }' filename

Bipin thanks for that.... once i executed ur awk script den i realised i had one more problem..... :stuck_out_tongue: i.e. there are chances few times that the column just gives blank value not 0.... so cani replace those columns with blank value as 0....??

awk -F, '{ s=$1;for(i=2;i<=NF;i+=2) s=($i~/^[ ]*$/)?s FS 0:s FS $i; print s }' filename
1 Like

Bipin,

It dint worked... i mean to say all my columns still have different no of lines

ale,421    ,3      ,3      ,4
ale,78     ,1      ,6      ,2
ale,684    ,1      ,3      ,1
ale,26     ,2      ,5      ,2
ale,13     ,1      ,1      ,5
ale,2      ,5      ,5      ,3
ale,8              ,2      ,207
ale,1              ,2      ,6
ale,5              ,253    ,6
ale,4              ,13     ,3
ale,1              ,3      ,33
ale,2              ,1      ,1
ale,4              ,1      ,4
ale,3              ,31     ,1
ale,3              ,4      ,112
ale,2              ,1      ,1
ale,539            ,5      ,1
ale,7              ,1      ,1
ale,7              ,1      ,1
ale,5              ,136    ,1
ale,76             ,4      ,1
ale,2              ,1      ,1
ale,1              ,1      ,158
ale,7              ,1      ,27
ale,1              ,1      ,246
ale,1              ,1      ,13
ale,1              ,2      ,4
ale,1              ,153    ,1
ale,1              ,43     ,2
ale,1              ,284    ,2
ale,123            ,13     ,5
ale,1              ,1      ,1
ale,2              ,1      ,5
ale,1              ,4      ,1
ale,1              ,4      ,1
ale,1              ,2      ,3
ale,1              ,2      ,196
ale,3              ,2      ,5
ale,2              ,5      ,2
ale,1              ,1      ,2
ale,1              ,195    ,26
ale,328            ,9      ,1
ale,31             ,5      ,4
ale,493            ,3
ale,8              ,30
ale,10             ,1
ale,3              ,5
ale,1              ,1
ale,5              ,1
ale,1
ale,2
ale,1

[/CODE]

file after the awk script given by u...

Try:

awk -F'[ \t]+,[^,]+,' '$1=$1' OFS=, file
awk '{gsub(/[ \t]+,[^,]+,/,",")}1' file
perl -pe 's/\s+,.*?,/,/g' file
3 Likes