我能否在下面的awk命令中以变量的形式给出value(32)而不是直接对32进行硬编码?
df -h | head -1|awk '{printf "%s%32s",$1,$2}'
我尝试过像awk -v var=32
,但无法正常工作。
有人可以建议我吗?
答案 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}'