AWK传递变量

时间:2018-07-19 13:43:08

标签: shell unix awk

我能否在下面的awk命令中以变量的形式给出value(32)而不是直接对32进行硬编码?

df -h | head -1|awk '{printf "%s%32s",$1,$2}'

我尝试过像awk -v var=32,但无法正常工作。

有人可以建议我吗?

3 个答案:

答案 0 :(得分:5)

awk -v var=32 '{printf "%s%*s\n", $1, var, $2}'

答案 1 :(得分:1)

awk -v var=32 '{printf "%s%"var"s", $1,$2}'

注意:Ed Morton的解决方案更加简洁,因为它不使用AWK字符串连接,而是直接使用printf格式

同时,如果您想摆脱head,则可以将所有内容组合为:

$ df -h | awk -v var=32 '{printf "%s%"var"s", $1,$2; exit}'

答案 2 :(得分:0)

如果您已经将数字存储在环境变量中(例如:FIELD_WIDTH),则可以使用Ed Morton给出的答案的另一种替代方法。在这种情况下,

df -h | head -1|awk '{printf "%s%" ENVIRON["FIELD_WIDTH"] "s",$1,$2}'

会做这份工作。

更新:

您还应该摆脱head

df -h | awk 'NR==1 {printf "%s%" ENVIRON["FIELD_WIDTH"] "s",$1,$2}'