如何去除df命令输出及排序结果中的Filesystem表头?
嘿,我来帮你捋清楚这个问题~
首先你原来的命令有两个小问题:一是没跳过表头行,所以Filesystem会被一起传给sort;二是你用awk只输出了第一列(卷名),但sort -k3是要按输入行的第三列排序——可这时候输入给sort的只有一列,这个排序参数根本没生效,等于白加了😅
下面给你两种场景的正确命令,按需选就行:
场景1:要显示卷的完整信息,按已用数据量倒序,且去掉表头
先通过tail -n +2过滤掉第一行的表头,再用sort按第三列(已用数据量)数值倒序排序:
df | tail -n +2 | sort -r -k3 -n
这里tail -n +2的意思是从第2行开始输出,直接砍掉表头;sort的-r是倒序、-k3指定按第3列排序、-n确保按数值大小排序(避免把数字当字符串排错)。
场景2:只需要显示卷名(Filesystem列),但按已用数据量倒序排列
这时候得先把已用数据量和卷名绑定输出,排序后再提取卷名:
df | awk 'NR>1 {print $3, $1}' | sort -r -n | awk '{print $2}'
拆解一下:
- 第一个
awk:NR>1跳过表头行,输出已用数据量($3)和卷名($1); sort -r -n:按已用数据量的数值倒序排序;- 第二个
awk:提取排序后的卷名列。
要是你想用awk一次性搞定,也可以这么写(不过如果有多个卷已用数据量相同,可能会丢失条目,不如上面的方法稳妥):
df | awk 'NR>1 {arr[$3]=$1} END {for (size in arr) print arr[size] | "sort -r -n"}'
总结一下,你原来的命令要去掉表头,只需要给awk加个NR>1的判断(比如df | awk 'NR>1 {print $1 | "sort -r -k3 -n"}'),但这样排序还是无效的——因为你只输出了第一列,sort找不到第三列来排序,所以一定要先保留用于排序的列,或者用我上面给的完整命令哦。
内容的提问来源于stack exchange,提问作者83Bismuth
相关产品推荐
相关产品推荐

