做
之类的事情的最佳方式是什么?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循环
答案 0 :(得分:1)
使用printf
省略换行符,但您需要使用format string并自行添加换行符:
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"
}'
答案 1 :(得分:0)
使用数组A,您可以
for i in $(seq 0 2 ${#A}); do
printf "%s " ${A[i]}
done | sed 's/ $/\n/'