Shell AWK传递变量

Shell AWK传递变量,shell,unix,awk,Shell,Unix,Awk,我能否在下面的awk命令中以变量的形式给出值(32),而不是直接硬编码32 df -h | head -1|awk '{printf "%s%32s",$1,$2}' 我试过像awk-v var=32一样,但它不起作用 谁能推荐我一下吗 awk -v var=32 '{printf "%s%"var"s", $1,$2}' 注意:Ed Morton的解决方案更简洁,因为它不使用AWK字符串连接,而是直接使用printf格式 同时,如果你想摆脱你的头部,那么你可以将一切结合起来: $ df -

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

df -h | head -1|awk '{printf "%s%32s",$1,$2}'
我试过像awk-v var=32一样,但它不起作用

谁能推荐我一下吗

awk -v var=32 '{printf "%s%"var"s", $1,$2}'
注意:Ed Morton的解决方案更简洁,因为它不使用AWK字符串连接,而是直接使用
printf
格式

同时,如果你想摆脱你的
头部
,那么你可以将一切结合起来:

$ df -h | awk -v var=32 '{printf "%s%"var"s", $1,$2; exit}'
注意:Ed Morton的解决方案更简洁,因为它不使用AWK字符串连接,而是直接使用
printf
格式

同时,如果你想摆脱你的
头部
,那么你可以将一切结合起来:

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

如果您已经将数字存储在环境变量中(例如:
FIELD\u WIDTH
),那么Ed Morton给出的答案的另一种选择可能会很有用。在这种情况下,

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

更新:

您还应该去掉
头部

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

如果您已经将数字存储在环境变量中(例如:
FIELD\u WIDTH
),那么Ed Morton给出的答案的另一种选择可能会很有用。在这种情况下,

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

更新:

您还应该去掉
头部

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

它不工作
是你能给出的最糟糕的故障描述之一,通常会引起阅读它的每个人的呻吟。永远不要只说它不起作用了-告诉我们它以什么方式不起作用了。语法错误,输出错误,没有输出,核心转储,还有什么?并准确地向我们展示您运行的失败脚本,而不仅仅是它的开始-我们不知道您在初始化后对
var
做了什么,因此我们无法告诉您哪里出了问题。可能是重复的,他没有使用shell变量,他正在做正确的事情,将shell值传递给awk脚本,问题在于他对那个变量做了什么,他还没有向我们展示那个代码。我怀疑问题在于如何在printf格式字符串中使用awk变量,而不是如何使用shell变量。
它不起作用
是您可能给出的最糟糕的故障描述之一,通常会引起每个阅读它的人的呻吟。永远不要只说它不起作用了-告诉我们它以什么方式不起作用了。语法错误,输出错误,没有输出,核心转储,还有什么?并准确地向我们展示您运行的失败脚本,而不仅仅是它的开始-我们不知道您在初始化后对
var
做了什么,因此我们无法告诉您哪里出了问题。可能是重复的,他没有使用shell变量,他正在做正确的事情,将shell值传递给awk脚本,问题在于他对那个变量做了什么,他还没有向我们展示那个代码。我想问题是如何在printf格式字符串中使用awk变量,而不是如何使用shell变量,。它在Linux中工作,但在Solaris上尝试时也是一样,我发现了一个错误。我可以知道原因吗?Solaris上的默认awk是旧的、损坏的awk(也称为“oawk”),永远不能使用它,因为它是旧的、损坏的。在Solaris上使用/usr/xpg4/bin/awk而不是默认的(我不记得是在/bin或/usr/bin中),因为这是最接近现代POSIX awk的。不要试图使用新的AWK aka
nawk
,因为它只是与“oawk”相关的“新的”。nawk本身非常陈旧,缺少POSIX功能。非常感谢Morton,。它在Linux中工作,但在Solaris上尝试时也是一样,我发现了一个错误。我可以知道原因吗?Solaris上的默认awk是旧的、损坏的awk(也称为“oawk”),永远不能使用它,因为它是旧的、损坏的。在Solaris上使用/usr/xpg4/bin/awk而不是默认的(我不记得是在/bin或/usr/bin中),因为这是最接近现代POSIX awk的。不要试图使用新的AWK aka
nawk
,因为它只是与“oawk”相关的“新的”。nawk本身非常陈旧,缺乏POSIX功能。