Exercise #1: Learning awk Basics
bashshell.net
bashshell.net
Awk's pattern-structured rules are very powerful, and learning to use them well (rather than writing if statements, etc.) is a big part of using awk idiomatically.
Also, note which awk you're using - awk may actually be nawk ("new awk", the awk that book covers) or GNU awk, which, in typical FSF fashion, has grafted on a whole bunch of extra functionality. (Although the networking stuff is cool.) Things will probably make more sense if you start with nawk, and then explore the sprawling extensions of gawk.
For some reason, new copies are really expensive ($80+), but used copies are typically only $15ish.
Does anyone know how to achieve the following command in a more type friendly way?:
awk '{print $1}'
Seriously, if you are going to be using a shell, you will be typing a ' char all the time, so probably better to just get used to it rather than go through all those convolutions with tr and cut.
> echo '1 2 3 4' | awk '{print $1}'
1
> echo '1 2 3 4' | cut -f1
1 2 3 4
echo '1 2 3 4' | cut -d' ' -f1
By default cut uses TAB as delimiter echo '1 2 3 4' | cut -d' ' -f2
'cut' fails when fields are separated by multiple spaces. echo '1 2 3 4' | sp2tab | cut -f2
would be equivalent to echo '1 2 3 4' | awk '{print $2}'
but quicker to write. > echo '1 2 3 4' | sed 's/ */\t/g' | cut -f2
2tr is nice!
echo ' 1 2 3 4' | tr -s " " | cut -f1 -d " "
>
echo ' 1 2 3 4' | awk '{print $1}'
>1