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] }' <abc.txt
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] }' <abc.txt
(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
.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…