Tôi muốn trích xuất từ lệnh ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}'
thời gian trung bình.trích xuất thời gian trung bình từ ping -c
107.921/108.929/110.394/0.905 ms
Output nên là: 108.929
Tôi muốn trích xuất từ lệnh ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}'
thời gian trung bình.trích xuất thời gian trung bình từ ping -c
107.921/108.929/110.394/0.905 ms
Output nên là: 108.929
Một cách là chỉ cần thêm một vết cắt với những gì bạn có ở đó.
ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}' | cut -d '/' -f 2
ping -c 4 www.stackoverflow.com | tail -1| awk -F '/' '{print $5}'
sẽ hoạt động tốt.
"-F" tùy chọn được sử dụng để xác định dấu phân cách trường.
Điều này có thể làm việc cho bạn:
ping -c 4 www.stackoverflow.com | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|'
Các giải pháp sau đây chỉ sử dụng Bash (yêu cầu Bash 3):
[[ $(ping -q -c 4 www.example.com) =~ \ =\ [^/]*/([0-9]+\.[0-9]+).*ms ]] \
&& echo ${BASH_REMATCH[1]}
Đối với các biểu hiện thường xuyên nó dễ dàng hơn để đọc (và xử lý) nếu nó được lưu trữ trong một biến:
regex='= [^/]*/([0-9]+\.[0-9]+).*ms'
[[ $(ping -q -c 4 www.example.com) =~ $regex ]] && echo ${BASH_REMATCH[1]}
Bạn có thể muốn thay đổi regex thành '= [^ /] */([0-9.] +). * ms' để bao gồm các giá trị trung bình mà không cần bất kỳ số thập phân. – gsbabil
Quảng cáo luissquall's very elegent comment cho câu trả lời:
ping -c 4 www.stackoverflow.com | awk -F '/' 'END {print $5}'
chiết xuất trực tiếp có nghĩa là thời gian từ lệnh ping:
ping -w 4 -q www.duckduckgo.com | cut -d "/" -s -f5
Options:
-w time out 4 seconds
-q quite mode
-d delimiter
-s skip line without delimiter
-f No. of field - depends on your system - sometimes 5th, sometimes 4th
tôi personly sử dụng là theo cách này:
if [ $(ping -w 2 -q www.duckduckgo.com | cut -d "/" -s -f4 | cut -d "." -f1) -lt 20 ]; then
echo "good response time"
else
echo "bad response time"
fi
thx, mà đã làm các trick . Mặc dù tôi đang tự hỏi về một cách tốt hơn với ít đường ống và cuối cùng với hiệu suất tốt hơn. – jack
@jack: sau tối thiểu bốn giây để nhận dữ liệu thực tế, chi phí nhỏ trong đường ống này có thể sẽ không bao giờ quan trọng. –