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

在linux中获取%之前的数字的命令,linux,sed,awk,Linux,Sed,Awk,在linux中,我使用df-k | tail-1命令&输出为 1717567488 1616255744 101311744 95% /home/asimon 我想从中获得95%的收益 有命令吗?这里有一个可能的解决方案: sed 's/^.*[[:blank:]]\([[:digit:]]*\)\%.*$/\1/' 它将删除整行并替换为匹配项(即零位或多位数字,前面为空白,后面为百分比)。请注意,如果没有匹配项,您将返回完整的输入行。这里有一个可

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

                     1717567488 1616255744 101311744  95% /home/asimon
我想从中获得95%的收益


有命令吗?

这里有一个可能的解决方案:

sed 's/^.*[[:blank:]]\([[:digit:]]*\)\%.*$/\1/'

它将删除整行并替换为匹配项(即零位或多位数字,前面为空白,后面为百分比)。请注意,如果没有匹配项,您将返回完整的输入行。

这里有一个可能的解决方案:

sed 's/^.*[[:blank:]]\([[:digit:]]*\)\%.*$/\1/'

它将删除整行并替换为匹配项(即零位或多位数字,前面为空白,后面为百分比)。请注意,如果没有匹配项,您将返回完整的输入行。

您的
df-k | tail-1
命令可能会随时间返回不同的文件系统信息。您可能应该通过另一种方法选择所需的文件系统:

df -k | grep asimon

在选择所需字段时,
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

随着时间的推移,
df-k | tail-1
命令可能会返回不同的文件系统信息。您可能应该通过另一种方法选择所需的文件系统:

df -k | grep asimon

在选择所需字段时,
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

这是你可以尝试的

df -k | tail -1 |  cut -d% -f1 | awk '{ print $(NF) }'

这是你可以尝试的

df -k | tail -1 |  cut -d% -f1 | awk '{ print $(NF) }'

在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

在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

这可能适合您:

df -k | sed '$!d;/%/{s/%.*//;s/.*\s//}'

这可能适合您:

df -k | sed '$!d;/%/{s/%.*//;s/.*\s//}'

您可能不想使用'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到底算什么是免费的…

您可能不想使用“df”来表示这一点,而使用“stat”。使用-c显示空闲块和总块,并构造一个表达式以通过管道传输到bc以获得百分比:

$ stat --file-system  -c 100*\(1-%f/%b\) /| bc -l
2.55971958854837098100
df -k | tail -1 | sed 's/.*\([0-9]\+\)%.*/\1/'
比较:

$ df -k /
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1            480617176  12302452 443900724   3% /
由于四舍五入,有一些轻微的分歧,我不确定df到底算什么自由

df -k | tail -1 | sed 's/.*\([0-9]\+\)%.*/\1/'
使用正则表达式匹配


使用regex match

+1与AWK进行模式匹配,这是一个比tail更好的解决方案。+1与AWK进行模式匹配,这是一个比tail更好的解决方案。如果您希望“使用您的答案更新”,请将其作为答案。@Oded:在其他机器中,我的命令不起作用。您的观点是什么?我的意思是,如果你想解释你最终做了什么,你应该这样做作为你自己问题的答案,而不是作为你问题的编辑。如果你想“用你的答案更新”,请这样做作为答案。@Oded:在另一台机器上,我的命令不起作用。你的观点是什么?我的意思是,如果你想解释你最终做了什么,你应该这样做是为了回答你自己的问题,而不是编辑你的问题。