Câu hỏi Làm thế nào để nắm bắt phần trăm sử dụng đĩa của một phân vùng như một số nguyên?


Tôi muốn một phương pháp để nắm bắt việc sử dụng đĩa của một phân vùng cụ thể, bằng cách sử dụng thư mục nơi phân vùng được gắn kết. Đầu ra chỉ nên là một số nguyên không có đệm hoặc biểu tượng sau, vì tôi muốn lưu nó vào một biến.

Tôi đã sử dụng df --output=pcent /mount/point, nhưng cần phải cắt đầu ra vì nó có một tiêu đề không cần thiết, đệm không gian đơn trước giá trị và ký hiệu% theo giá trị như sau:

Use%
 83%

Trong trường hợp này, đầu ra tôi muốn đơn giản là 83. Tôi không biết bất kỳ hạn chế nào khi sử dụng đầu ra của df, nhưng rất vui khi chấp nhận các phương pháp khác không dựa vào nó.


13
2017-11-10 11:02


gốc


tại sao không đơn giản phân tích nó? - Jacob Vlijm
Tôi không thấy một nhược điểm, bạn có thể loại bỏ các tiêu đề với df sau đó | tr -dc '0-9' - bc2946088
Tôi đứng sửa chữa, tôi không thể tìm thấy các chuyển đổi để loại bỏ các tiêu đề từ df. - bc2946088
Tôi đã đọc trang người đàn ông, và trang thông tin và không thể tìm thấy nó @ bc2946088, hãy hét to để xem xét tr, Tôi đã nhận được đầu của tôi trong một mớ hỗn độn với ý tưởng sed và awk. - Arronical
Tôi cũng đã tìm kiếm tùy chọn xóa tiêu đề. Về cơ bản các nhà phát triển GNU không muốn thực hiện nó. Đã có yêu cầu tính năng và họ chỉ nói không. - Sergiy Kolodyazhnyy


Các câu trả lời:


Tôi sẽ sử dụng ...

df --output=pcent /mount/point | tr -dc '0-9'

Không chắc chắn nếu sed là nhanh hơn, nhưng tôi không bao giờ có thể nhớ các giá trị sed.


18
2017-11-10 11:47



Sử dụng time để kiểm tra nó đi ra như là nhanh như sed. - Arronical
@Arronical trừ khi kết quả đầu ra của bạn là waaaaaaaaaaaay lớn hơn 100%, tôi nghi ngờ bạn sẽ thấy nhiều sự khác biệt. : P - muru
@Arronical Những gì muru nói; thời gian triệu gọi có khả năng thống trị. - Michael Kjörling
Trong trường hợp này, tr dễ đọc hơn sed. - Paddy Landau


Đây là giải pháp awk:

$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'   
 37

Về cơ bản những gì xảy ra ở đây là chúng ta xử lý ký tự '%' làm dấu tách trường (dấu tách cột) và in cột đầu tiên $ 1 chỉ khi số lượng bản ghi bằng hai ( NR==2 phần )

Nếu chúng tôi muốn sử dụng bashcông cụ đơn giản, chúng ta có thể làm một cái gì đó như thế này:

bash-4.3$ df --output=pcent / | while IFS= read -r line; do ((c++)); [ $c -eq 2 ] && echo "${line%\%*}"  ;done
 74

8
2017-11-10 11:57





sed dung dịch

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
  • 1d xóa dòng đầu tiên
  • ; để tách các lệnh
  • s/^ // xóa một khoảng trống từ đầu dòng
  • s/%// tẩy % ký tên

7
2017-11-10 11:33





Bạn có thể ống đến một grep chỉ trích xuất chữ số:

df --output=pcent /mount/point | grep -o '[0-9]*'

Xem trực tiếp:

$ echo "Use%
> 83%" | grep -o '[0-9]*'
83

6
2017-11-11 09:28





Tôi đến một máy chủ nơi - đầu ra = pcent chưa được triển khai, vì vậy tôi đã sử dụng đầu ra bình thường, được lọc theo cột, theo sau là regex: df /mount/point | awk '{print $5}' | tr -dc '0-9'


0
2018-01-03 18:55