AWK - How to do the sorting? -
in awk, how can this:
1303361997;15;67.067014 1303361997;5;51.529837 1303361997;14;47.036197 1303361997;3;44.064681 1303361997;6;37.632831 1303361997;23;24.990078 1303361997;24;26.750984 1303361998;15;67.074100 1303361998;5;51.522981 1303361998;14;47.028185 1303361998;3;44.056715 1303361998;6;37.638584 1303361998;23;24.987800 1303361998;24;26.756648
when number in second columns absent date should replace 0 in output file. first place number of first column. values of second column of data determine position of third column in output file. first column each time may begin different values. desired output, sorting first , second columns:
1303361997;0;0;44.064681;0;51.529837;37.632831;0;0;0;0;0;0;0;47.036197;67.067014;0;0;0;0;0;0;0;24.990078;26.750984; 1303361998;0;0;44.056715;0;51.522981;37.638584;0;0;0;0;0;0;0;47.028185;67.074100;0;0;0;0;0;0;0;24.987800;26.756648;
$ cat tst.awk begin { fs=";" } nr == 1 { (i=1;i<=2;i++) { min[i] = max[i] = $i } } { val[$1,$2] = $3 keys[$1] (i=1;i<=2;i++) { min[i] = ($i < min[i] ? $i : min[i]) max[i] = ($i > max[i] ? $i : max[i]) } } end { (r=min[1];r<=max[1];r++) { if (r in keys) { printf "%d",r (c=1;c<=max[2];c++) { printf ";%s", ((r,c) in val ? val[r,c] : 0) } print ";" } } } $ $ cat file 1303361997;15;67.067014 1303361997;5;51.529837 1303361997;14;47.036197 1303361997;3;44.064681 1303361997;6;37.632831 1303361997;23;24.990078 1303361997;24;26.750984 1303361998;15;67.074100 1303361998;5;51.522981 1303361998;14;47.028185 1303361998;3;44.056715 1303361998;6;37.638584 1303361998;23;24.987800 1303361998;24;26.756648 $ $ awk -f tst.awk file 1303361997;0;0;44.064681;0;51.529837;37.632831;0;0;0;0;0;0;0;47.036197;67.067014;0;0;0;0;0;0;0;24.990078;26.750984; 1303361998;0;0;44.056715;0;51.522981;37.638584;0;0;0;0;0;0;0;47.028185;67.074100;0;0;0;0;0;0;0;24.987800;26.756648;
Comments
Post a Comment