Команда для получения числа перед% в Linux - PullRequest
1 голос
/ 21 ноября 2011

В Linux я использую команду df -k | tail -1 и вывод

                     1717567488 1616255744 101311744  95% /home/asimon

Я хочу получить 95 (прямо перед%) из него.

Любые команды?

Ответы [ 7 ]

2 голосов
/ 21 ноября 2011

Вот одно из возможных решений:

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

Вырезает всю строку и заменяет ее на совпадение (которое состоит из нуля или более цифр, перед которыми стоит пробел, а за которыми следует процент).Обратите внимание, что если совпадений не было, вы вернете полную строку ввода.

1 голос
/ 21 ноября 2011

Вы можете не использовать для этого «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 считается свободным ...

1 голос
/ 21 ноября 2011

Это может работать для вас:

df -k | sed '$!d;/%/{s/%.*//;s/.*\s//}'
1 голос
/ 21 ноября 2011

В 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
1 голос
/ 21 ноября 2011

Ваша команда 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
0 голосов
/ 22 ноября 2011
df -k | tail -1 | sed 's/.*\([0-9]\+\)%.*/\1/'

использовать регулярное выражение

0 голосов
/ 21 ноября 2011

Вот что вы можете попробовать

df -k | tail -1 |  cut -d% -f1 | awk '{ print $(NF) }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...