尝试使用awk打印列,但说找不到打印

时间:2015-06-19 22:54:39

标签: linux bash awk

所以我想做一些功课,并且遇到很多问题。这是我在UNIX / Linux中编写的第一个脚本。现在我试图从free命令打印出几列,并使用awk来抓取我需要的那些列。每当我尝试这样做时,我都会收到一个bash:print命令。

我正在尝试使用的命令:

free | awk `{print $3}`

我也试过没有{}。

所以当它完成时我想说它的例子:总可用内存:xx MB 随着xx填充当然结果。

感谢任何帮助。感谢。

更新: 好的,所以不要使用反引号来实现这一点。所以现在我希望整个命令最终说: 总可用内存:xx MB

我到目前为止的命令是:

echo "Current Free Memory: " | free -m | awk '{print $3}'

我只想要那一列的行交叉。

3 个答案:

答案 0 :(得分:3)

你在说

free | awk `{print $3}`

而你需要说awk '{...}'。也就是说,使用单引号而不是反引号:

free | awk '{print $3}'
           ^          ^

请注意,man awk中说明了这一点:

  

语法

  awk <options> 'Program' Input-File1 Input-File2 ...

  awk -f PROGRAM-FILE <options> Input-File1 Input-File2 ...

答案 1 :(得分:1)

你应该去场4。 正如我建议使用awk和sed,但这取决于你。

这是我的建议:

freem="$(free -m | awk '{print $4}' | sed -n '2p')"

echo "Total Free Memory: $freem MB"

其中$ 4是您想要的列,2p是您想要的行。

在编写脚本之前,请在命令行中检查结果。

答案 2 :(得分:0)

free -m | awk '/Mem:/ {print "Current Free Memory: " $4 " MB"}'