命令在linux中获取%之前的数字

时间:2011-11-21 08:39:09

标签: linux sed awk

在linux中我使用df -k | tail -1命令&输出是

                     1717567488 1616255744 101311744  95% /home/asimon

我希望 95 (就在%之前)。

任何命令?

7 个答案:

答案 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/'

使用正则表达式匹配