2016-06-08 58 views
2
#!/bin/bash 
echo "Enter process name" 
read process 
if pgrep "$process" > /dev/null 
then 
    echo 0 $(awk '/Rss/ {print "+", $2}' /proc/`pidof $process`/smaps) | bc; 
    echo "Kb" 
else 
    echo "Process $process not running" 
fi 

的代碼的輸出以上是擊殼編程回波

41250 
Kb 

,我需要在同一行中的「KB」輸出作爲像這樣

41250 Kb 
+0

'echo -n「text」' - 會做什麼? –

+0

你用printf試過printf了嗎? – lewiatan

回答

2

您可以使用echo -n輸出數據沒有尾隨的換行符,但是,對於這種特殊情況下,awk是完全能夠做的算術和格式化的其自己的,不涉及bc或不必要的子過程:

awk '/Rss/ {sum += $2} END {print sum" Kb"}' /proc/`pidof $process`/smaps 

你可以看到,在下面的抄本加起來兩個Rss數字7511得到86

pax> printf Rss 75\nCss 22\nRss 11\n' | awk '/Rss/ {sum += $2} END {print sum" Kb"}' 
86 Kb 
+0

謝謝你的工作完美 –

1

使用-n標誌。

例子:

echo -n 'I do not want a new line,' 
echo ' because there is something else here.' 

使用$ man echo以獲取更多信息。

0

41250後的換行符實際上是從bc,不是回聲。

在變量中捕獲bc的輸出可刪除尾隨換行符(ref)。

#!/bin/bash 
kbCount=$(echo "1+2" | bc) 
echo $kbCount "Kb" 

現在,你應該能夠解決它:)

+0

謝謝,這個也工作 –