Bash 要打印的awk动态字段列表

Bash 要打印的awk动态字段列表,bash,awk,Bash,Awk,做这样的事情最好的方法是什么 awk '{ print $1, $3, $5 }' 但是以一种动态的方式 这种情况下,要打印的最后一个字段仅在运行时已知。 所以可能是1美元、3美元、5美元,也可能是1美元、3美元、5美元、7美元、9美元甚至更多 我的第一次尝试是: awk -v MAX=7 '{for (i = 2; i < MAX; i+=2) {print i,$i} }' 而不是 a[2] a[4] a[6] 有没有更好的方法来实现这一点 谢谢你的建议。:) 一个后续问题。 在

做这样的事情最好的方法是什么

awk '{ print $1, $3, $5 }'
但是以一种动态的方式

这种情况下,要打印的最后一个字段仅在运行时已知。 所以可能是1美元、3美元、5美元,也可能是1美元、3美元、5美元、7美元、9美元甚至更多

我的第一次尝试是:

awk -v MAX=7 '{for (i = 2; i < MAX; i+=2) {print i,$i} }'
而不是

a[2] a[4] a[6]
有没有更好的方法来实现这一点

谢谢你的建议。:)

一个后续问题。 在运行时,我已经有了可用的序列,比如MyArray=(2 4 6 8) 有没有办法将此数组“传递”到awk并要求awk打印$2$4$6$8?
因此,我可以使用
printf
为awk内部的循环保存一个,省去了换行符,但您需要使用并自己添加一个换行符:

awk -v MAX=7 '{
    for (i = 2; i < MAX; i+=2) {
        printf "a[%d]=%s " i, $i
    }
    printf "\n"
}'

使用数组A可以执行以下操作:

for i in $(seq 0 2 ${#A}); do
   printf "%s " ${A[i]}
done | sed 's/ $/\n/'

谢谢你,骆驼先生。这绝对是一个很好的备选解决方案。我刚刚编辑了一个后续问题。想知道是否有办法将此保存为循环。:)我同意@rici的观点,即您的编辑可能应该是一个单独的问题,但为了方便起见,这个问题已经得到了回答:您应该避免在回答问题之后编辑问题,尤其是添加新的或不同的要求。这是一个不同的问题,所以只要问一个新问题。如果你觉得这很重要,请在新问题中引用原问题。原因:当答案与问题无关时,未来的读者会感到困惑。谢谢你的提示。我不会再那样做了。
awk -v MAX=7 '{
    print_num = 0

    for (i = 2; i < MAX; i+=2) {
        if ( print_num++ > 0 ) { printf " " }
        printf "a[%d]=%s" i, $i
    }
    printf "\n"
}'
for i in $(seq 0 2 ${#A}); do
   printf "%s " ${A[i]}
done | sed 's/ $/\n/'