所以我想做一些功课,并且遇到很多问题。这是我在UNIX / Linux中编写的第一个脚本。现在我试图从free命令打印出几列,并使用awk来抓取我需要的那些列。每当我尝试这样做时,我都会收到一个bash:print命令。
我正在尝试使用的命令:
free | awk `{print $3}`
我也试过没有{}。
所以当它完成时我想说它的例子:总可用内存:xx MB 随着xx填充当然结果。
感谢任何帮助。感谢。
更新: 好的,所以不要使用反引号来实现这一点。所以现在我希望整个命令最终说: 总可用内存:xx MB
我到目前为止的命令是:
echo "Current Free Memory: " | free -m | awk '{print $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"}'