2014-02-23 196 views
1

我試圖用AWK發佈此命令的最後一行(總磁盤空間)的第二行第二列:AWK打印最後一行

df --total 

我使用的命令是:

df --total | awk 'FNR == NF {print $2}' 

但它沒有得到正確的答案。 還有另一種方法可以做到嗎?

+0

您還可以使用'--output'來表示您想要打印的確切字段。例如,'df --output = size |尾巴-1'。有關不必要的額外過程,請參閱[如何在linux df命令中選擇特定列](http://stackoverflow.com/a/28809214/1983854) – fedorqui

回答

7

您可以使用tail第一,然後使用awk

df --total | tail -1 | awk '{print $2}' 
+0

-1。 –

+1

完美無瑕。 – user2248259

+4

@John,我不知道爲什麼一個額外的過程使它不那麼有用。您的環境中的流程是否有某種資源配額? :-) – paxdiablo

10

您使用awk的變量NF是字段數。您可能意味着NR,行數,但它更容易,只需使用END:

df --total | awk 'END {print $2}' 
+0

它也沒有'END'。你能解釋爲什麼'END'是必需的嗎? – 030

+1

@ 185140777因爲否則它將打印所有行中的第2個字段,而使用「END」則只打印最後一行中的第2個字段。 – fedorqui

7

一種方式來做到這一點是有tail/awk組合,前者得到公正的最後一行,後者打印第二柱:

df --total | tail -1l | awk '{print $2}' 

甲純鐵awk的解決方案是簡單地存儲每行的第二列,並打印出來底:

df --total | awk '{store = $2} END {print store}' 

或者,因爲最終列在END塊維持在最後一行,簡單地說:

df --total | awk 'END {print $2}' 
+1

您不需要將'$ 2'存儲爲一個變量,只需將其打印在結尾部分即可。 – Jotne

2

AWK沒有的「這是最後一行」的概念。 sed確實如此:

df --total | sed -n '$s/[^[:space:]]\+[[:space:]]\+\([[:digit:]]\+\).*/\1/p'