Quoting Trouble? Think, Then Use echo
Q: I can't get the following shell script to work:
case $col2 in "income") awk '{if($2=="$col2") { /* THIS LINE IS THE PROBLEM */ /* I CAN'T GET AWK TO RECOGNIZE EITHER '$col2' or '$2' */ . . } ' $file1 ;;
A: It is clear from this code fragment that awk is supposed to compare $2
with "income"
. If you think about it (or change awk
to echo
above), you will see that you have given the following to awk:
{if($2==income) { /* THIS LINE IS THE PROBLEM */
A: What does awk do with this? It compares $2
with the contents of the variable income. If income has not been set, it compares it with zero or with the null string. Instead, you want:
{ if ($2 == "income") {
A: which you can say with:
case $col2 in income) awk ' { if ($2 == "'$col2'") { ... awk code ... } }' $file1;;
Replacing commands with echo
in shell scripts is a handy debugging trick.
- CT in net.unix on Usenet, 1 November 1986