AWK打印最后一行

问题描述:

我试图用AWK发布此命令的最后一行(总磁盘空间)的第二行第二列:AWK打印最后一行

df --total 

我使用的命令是:

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

但它没有得到正确的答案。 还有另一种方法可以做到吗?

+0

您还可以使用'--output'来表示您想要打印的确切字段。例如,'df --output = size |尾巴-1'。有关不必要的额外过程,请参阅[如何在linux df命令中选择特定列](http://*.com/a/28809214/1983854) – fedorqui

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

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

-1。 –

+1

完美无瑕。 – user2248259

+4

@John,我不知道为什么一个额外的过程使它不那么有用。您的环境中的流程是否有某种资源配额? :-) – paxdiablo

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

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

它也没有'END'。你能解释为什么'END'是必需的吗? – 030

+1

@ 185140777因为否则它将打印所有行中的第2个字段,而使用“END”则只打印最后一行中的第2个字段。 – fedorqui

一种方式来做到这一点是有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

AWK没有的“这是最后一行”的概念。 sed确实如此:

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