要打印的 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]

而不是

a[2] a[4] a[6]

有没有更好的方法来实现这一目标?

感谢您的所有建议。 :)

一个后续问题。在运行时,我已经有可用的序列,比如 MyArray=(2 4 6 8)有没有办法将此数组"传递"到 awk 中并要求 awk 打印 $2 $4 $6 $8 ?这样我就可以在awk中保存一个for循环

使用 printf 省略换行符,

但您需要使用格式字符串并自己添加换行符:

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

请注意,上面的示例在每行的最后一a[N]=VAL之后包含一个尾随空格。 如果要省略它,可以使用以下内容:

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"
}'

使用数组 A 可以

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

相关内容

  • 没有找到相关文章

最新更新