I'm learning awk from The AWK Programming Language and I have a problem with one of the examples.
If I wanted to print $3 if $2 is equal to a value (e.g.1
), I was using this command which works fine:
awk '$2==1 {print $3}' <infile> | more
But when I substitute 1 by another searching criteria, (e.g.findtext
), the command doesn't work:
awk '$1== findtext {print $3}' <infile> | more
It returns no output and I'm sure that 'findtext' exist on the input file.
I also tried this, but it does not work:
awk '$1== "findtext" {print $3}' <infile> | more
Here's my test file named 'test' and it has 9 lines and 8 fields, separated by space:
1 11 0.959660297 0 0.021231423 -0.0073 -0.0031 MhZisp
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
3 19 0.98089172 0 0 -0.0158 0.0124 MhNonZ
4 15 0.704883227 0.265392781 0.010615711 -0.0087 -0.0092 MhZisp
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
6 23 0.715498938 0 0.265392781 -0.0013 -0.0309 Unkn
7 26 0.927813163 0 0.053078556 -0.0051 -0.0636 MhZisp
8 44 0.55626327 0.222929936 0.201698514 0.0053 -0.0438 MhZisp
9 31 0.492569002 0.350318471 0.138004246 0.0485 0.0088 ClNonZ
Here's what I did and the output:
$awk '$8 == "ClNonZ" {print $3}' test
$ grep ClNonZ test
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
9 31 0.492569002 0.350318471 0.138004246 0.0485 0.0088 ClNonZ
I expect to see this which is the $3 that has "ClNonZ" in their $8.
0.180467091
0.010615711
0.492569002
Don't know why the awk command didn't return anything. Any thoughts?
My awk version is 3.1.5.
Yes, the input file is space separated, no tabs.
According to arutaku's answer, here's what I tried that worked:
awk '$8 ~ "ClNonZ"{ print $3; }' test
0.180467091
0.010615711
0.492569002
$ awk '$8 ~ "ClNonZ" { print $3}' test
0.180467091
0.010615711
0.492569002
What didn't work(I don't know why and maybe due to my awk version:),
$awk '$8 ~ "^ClNonZ$"{ print $3; }' test
$awk '$8 == "ClNonZ" { print $3 }' test
Thank you all for your answers, comments and help!
This is more readable for me
awk '{if ($2 ~ /findtext/) print $3}' <infile>
please try this
echo $VAR | grep ClNonZ | awk '{print $3}';
or
echo cat filename | grep ClNonZ | awk '{print $3}';
This method uses regexp, it should work:
awk '$2 ~ /findtext/ {print $3}' <infile>
Depending on the AWK
implementation are you using ==
is ok or not.
Have you tried ~
?. For example, if you want $1 to be "hello":
awk '$1 ~ /^hello$/{ print $3; }' <infile>
^
means $1 start, and $
is $1 end.
Source: Stackoverflow.com