2015-06-19 80 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"}'