2015-06-19 144 views
1

因此,我正在尝试做一些作业,并且遇到很多问题。这是我在UNIX/Linux中编写的第一个脚本。现在我正试图从free命令中打印出几列,并使用awk来抓取我需要的那些列。每次我尝试这样做,我得到一个bash:打印命令未找到。尝试使用awk打印列但打印未找到

命令我想使用:

free | awk `{print $3}` 

我自己也尝试没有{}。

因此,当它完成后,我想说,例如:总可用内存:xx MB 与xx填充当然与结果。

任何帮助表示赞赏。谢谢。

更新: 好吧,所以不要使用反引号来让它工作。所以现在我想整个命令落得说: 总可用内存:XX MB

我到目前为止的命令是:

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

我只想只是一个列交集。

回答

1

你应该去外地4. 作为我建议使用awk和sed,但这取决于你。

这里是我的建议:

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

echo "Total Free Memory: $freem MB" 

其中4 $是你想要的列和2P是你想要的线路。

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

+0

这是一种非常低效的做事方式。将awk塞到sed是不必要的,因为awk本身可以处理它。 – fedorqui

+0

@fedorqui你是对的,但我给了他许多其他可能的解决方案之一。他甚至可以使用剪切....它总是取决于你的需求。请随时与我们分享您的建议 –

+1

Just awk'NR == 2 {print $ 4}' – fedorqui

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 ... 
+0

阿哈......谢谢。我们的教授一直在谈论使用反引号,我想我感到困惑。 – Jeremy

+0

那么,如何才能从输出中获得一行。像一列和一行? – Jeremy

+0

更好地更新您的问题,显示您想要做什么。 – fedorqui

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