Shell AWK打印最后一行的第二列

Shell AWK打印最后一行的第二列,shell,awk,Shell,Awk,我正在尝试使用AWK发布此命令最后一行的第二行(总磁盘空间): 我使用的命令是: df --total | awk 'FNR == NF {print $2}' 但这并不正确。 还有其他方法吗?您可以先使用tail,然后使用awk: df --total | tail -1 | awk '{print $2}' 您使用的是awk变量NF,它是字段数。您可能指的是NR,行数,但只使用END更容易: df --total | awk 'END {print $2}' 一种方法是使用tail/a

我正在尝试使用AWK发布此命令最后一行的第二行(总磁盘空间):

我使用的命令是:

df --total | awk 'FNR == NF {print $2}'
但这并不正确。
还有其他方法吗?

您可以先使用
tail
,然后使用
awk

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

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

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

一种方法是使用
tail/awk
组合,前者只获取最后一行,后者打印第二列:

df --total | tail -1l | awk '{print $2}'
一个纯粹的解决方案是存储每行的第二列并在末尾打印出来:

df --total | awk '{store = $2} END {print store}'
或者,由于最后一行的
END
块中保留了最后一列,因此只需:

df --total | awk 'END {print $2}'
awk没有“这是最后一行”的概念。但是,sed做到了:

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

@约翰,我不明白为什么一个额外的过程会使它变得不那么有用。您对环境中的进程有某种资源配额吗?:-)@paxdiablo:当然可以,我们可以使用额外的过程。但这就像是对Cat的无用使用,我相信你会欣赏这一点:如果有人想在awk中做一些在awk中很容易做到的事情,那么就不需要产生另一个过程。就像有人问如何用Python做某事,而我们知道如何用Perl做一样;我们不建议为此生成子流程。但对每个人来说,这可能太老派了(就像awk本身一样!)。你不需要存储
$2
一个变量,只需将它打印在结尾部分。它也可以在没有
结尾的情况下工作。您能解释一下为什么需要
END
吗?@185140777,否则它将打印所有行中的第二个字段,而使用
END
它只打印最后一行中的第二个字段。您还可以使用
--output
来指示要打印的确切字段。例如,
df--output=size | tail-1
。更多信息请访问
df --total | sed -n '$s/[^[:space:]]\+[[:space:]]\+\([[:digit:]]\+\).*/\1/p'