2015-10-13 6 views
0

Я хотел бы получить все остальное дисковое пространство в моем домашнем каталоге:Получить оставшийся дисковое пространство от выхода ДФА в

df -h 
Filesystem  Size Used Avail Use% Mounted on 
rootfs   20G 15G 3.5G 81%/
/dev/root  20G 15G 3.5G 81%/
devtmpfs  990M 4.0K 990M 1% /dev 
none   199M 2.7M 196M 2% /run 
none   5.0M  0 5.0M 0% /run/lock 
none   991M 12K 991M 1% /run/shm 
/dev/sda2  894G 847G 1.9G 100% /home 

Примечания: Все, что нужно из вышеприведенного вывода является 1.9G

+0

Вот подсказка: 'awk' - ваш друг. –

ответ

2

использование grep взять только домашнюю линию /, и awk получить только поле, которое вы хотите:

df -h | grep -w /home | awk '{print $4}' 
+0

Удивительно, я все еще начинаю, если вы могли бы объяснить это мне, пожалуйста, –

+1

@OumAlaa: 'grep -w/home' выводит только строки из вывода 'df -h', которые содержат строку'/home' как целое слово. Результат передается в 'awk', который затем печатает только 4-е поле, разделенное пробелами на этой строке, что является оставшейся суммой на диске. [explainhell.com] (http://explainshell.com) - отличный сайт для анализа командной строки оболочки; вот объяснение 'grep -w/home': http://explainshell.com/explain?cmd=grep+-w+%2Fhome. – mklement0

+0

@OumAlaa: Хотя здесь нет реальной проблемы с точки зрения производительности, нет необходимости получать 'grep' - и, следовательно, дополнительный процесс - задействован, потому что' awk' может легко и точнее выполнить один и тот же тест для присутствия '/ home', о чем свидетельствует мой ответ. Тем не менее, иногда проще разбить процесс на более мелкие шаги, и это нормально, если производительность не вызывает беспокойства. – mklement0

0

Передаст попробовать:

df -h | awk '{print $4}' 
+0

Я отредактировал мой вопрос выше –

+0

Ответа на этот вопрос отредактировал для соответствия. –

+0

Это результат: 'df -h | AWK «{печать $ 4}» Свободна 3,3 г 3,3 г 990m 196m 5.0M 991M 773M' , но мне нужно только последний –

0

в то время как кольцевой, и привязаны к ext2, вот способ с tune2fs

tune2fs /dev/sdc1 -l | egrep '^(Free blocks|Block size)' | 
    cut -d: -f2 | xargs | 
    while read free size; 
    do 
     echo "$free blocks of size $size free: $((($size*$free)>>20)) mebibytes" 
    done 
1

Попробуйте следующую команду awk:

df -h | awk '$6 == "/home" { print $4 }' 
  • $6 == "/home" только обрабатывает (один) линию, шестой разделенный пробелами столбец содержит /home.
  • { print $4 } печатает четвертое поле, разделенное пробелами на этой линии, которое является оставшимся дисковым пространством.
+0

отзывчивость, поэтому вид у вас, я не знаком с «AWK " –

+0

@OumAlaa: Мое удовольствие; 'awk' стоит изучать; это мощный инструмент для обработки текста - см. https://en.wikipedia.org/wiki/AWK для фона. – mklement0

+0

Большое спасибо, спасибо –

1

Попробуйте одну из следующих команд:

$ grep -o 1.9G <(df -h) 
$ df -h|awk '/home/{print $4}' 
$ grep home <(df -h) | awk '{print $4}' 
$ df=($(tail -1 <(df -h))) echo ${df[3]} 
$ vi -es +'%j|norm 3dWWd$' -c%p -cq! <(df -h) 
$ printf "%s\n" $(tail -1 <(df -h))|tail -3|head -1 
$ ex -s <(df -h|egrep -o "\S+\s+\S+\s+/home") +'norm Wd$' +%p -cq! 
+0

Это в основном: 'grep'/filter-by home <([подстановка процесса] (https://en.wikipedia.org/wiki/Process_substitution))' | '' awk' {print 4th column} – kenorb

+0

Ужасно, нравится –

 Смежные вопросы

  • Нет связанных вопросов^_^