在for循环中使用awk打印列

时间:2018-04-27 19:33:18

标签: bash for-loop awk

我希望print $2在for循环中。我尝试了以下

for i in {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21}; do
awk '{ print $${i} }' COLVAR >tmp_${i}
done

它给出了语法错误。我也试过${${i}},但仍然是语法错误。我不确定是什么问题。

1 个答案:

答案 0 :(得分:0)

$ cat file
a b c d e

要在awk中使用shell变量,请使用-v

$ for i in 2 3 4; do awk -v i=$i '{ print $i }' file; done
b
c
d

通常最好的方法是在awk中完成这样的事情:

$ awk 'BEGIN { split("2 3 4", a) } { for (i in a) print $i }' file
a
b
c