On Tue, 19 Nov 2013, Kathryn Hogg wrote:

> If you want to print out the whole row with field #6 modified, try this
>
> awk -F';' 'BEGIN { OFS=";"}
> {$6=substr($6, 0, 3); print $0;}'


Wow.  I love it.  I had no idea that I could do things like that with awk. 
The big revelation for me is that I can change a value in a field and then 
print out the line with that change.  That is really good to know.

I'm not sure what BEGIN does -- is it needed?  Same for the final 
semicolon.  I dropped them and it seemed to do the same thing:

echo "a;2; 3;4;5 ;abcdefghijk;7;8;9" | awk -F';' 'BEGIN { OFS=";"} {$6=substr($6, 0, 3); print $0;}'
a;2; 3;4;5 ;abc;7;8;9

echo "a;2; 3;4;5 ;abcdefghijk;7;8;9" | awk -F';' '{OFS=";"} {$6=substr($6, 0, 3); print $0}'
a;2; 3;4;5 ;abc;7;8;9

I didn't know substr() either, which is a good one.  I would have thought 
to use printf() but that is not nearly as good.

Mike