在linux中我使用df -k | tail -1
命令&输出是
1717567488 1616255744 101311744 95% /home/asimon
我希望 95 (就在%之前)。
任何命令?
答案 0 :(得分:2)
这是一个可能的解决方案:
sed 's/^.*[[:blank:]]\([[:digit:]]*\)\%.*$/\1/'
它会删除整行并将其替换为匹配(前面有空白后跟百分比的零个或多个数字)。请注意,如果没有匹配,您将获得完整的输入行。
答案 1 :(得分:1)
您的df -k | tail -1
命令可能会随时间返回不同的文件系统信息。您应该通过另一种方法选择所需的文件系统:
df -k | grep asimon
或
cd /home/asimon && df -k .| tail -1
或
df -k /home/asimon | tail -1
当只选择你想要的字段时,awk(1)
对此有好处:
df -k /home/asimon | tail -1 | tr -d '%' | awk '{print $5;}'
或者放弃tail(1)
来电,使用awk(1)
的模式匹配:
$ df -k /home | tr -d '%' | awk '/home/ {print $5;}'
39
答案 2 :(得分:1)
在awk中你可以使用这样的东西 -
[jaypal~/Temp]$ cat text6
1717567488 1616255744 101311744 95% /home/asimon
[jaypal~/Temp]$ awk '{print substr($(NF-1),1,2);}' text6
95
<强>更新强>
刚刚意识到如果值是单个数字那么它将无法工作。以下命令将 -
[jaypal~/Temp]$ cat text6
1717567488 1616255744 101311744 95% /home/asimon
1717567488 1616255744 101311744 5% /home/asimon
[jaypal~/Temp]$ awk '{ print $(NF-1) }' text6 | tr -d '%'
95
5
答案 3 :(得分:1)
这可能对您有用:
df -k | sed '$!d;/%/{s/%.*//;s/.*\s//}'
答案 4 :(得分:1)
您可能不想为此使用'df',并使用'stat'。使用-c显示空闲块和总块,并构造一个表达式以管道到bc以获得百分比:
$ stat --file-system -c 100*\(1-%f/%b\) /| bc -l
2.55971958854837098100
比较
$ df -k /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 480617176 12302452 443900724 3% /
因为四舍五入而存在一些轻微的分歧,我不确定df究竟是什么意思是免费的......
答案 5 :(得分:0)
以下是您可以尝试的内容
df -k | tail -1 | cut -d% -f1 | awk '{ print $(NF) }'
答案 6 :(得分:0)
df -k | tail -1 | sed 's/.*\([0-9]\+\)%.*/\1/'
使用正则表达式匹配