Use array variable in awk?

后端 未结 4 930
你的背包
你的背包 2020-12-06 02:55
A=(aaa bbb ccc)    
cat abc.txt | awk \'{ print $1, ${A[$1]} }\'

I want to index an array element based on the $1, but the code above is not correc

4条回答
  •  借酒劲吻你
    2020-12-06 03:08

    You can't index a bash array using a value generated inside awk, even if you weren't using single quotes (thereby preventing bash from doing any substitution). You could pass the array in, though.

    A=(aaa bbb ccc)
    awk -v a="${A[*]}" 'BEGIN {split(a, A, / /)}
                         {print $1, A[$1] }' 

    Because of the split function inside awk, the elements of A may not contain spaces or newlines. If you need to do anything more interesting, set the array inside of awk.

    awk 'BEGIN {a[1] = "foo bar"  # sadly, there is no way to set an array all
                a[2] = "baz"    } #   at once without abusing split() as above
               {print $1, a[$1] }' 

    (Clarification: bash substitutes variables before invoking the program whose argument you're substituting, so by the time you have $1 in awk it's far too late to ask bash to use it to substitute a particular element of A.)

提交回复
热议问题