2013-06-06 37 views
17

Tôi sử dụng chương trình/usr/bin/time để đo thời gian cho lệnh. với tham số --format tôi có thể định dạng đầu ra. ví dụ:/usr/bin/time - xuất ra định dạng thời gian trôi qua tính bằng mili giây

/usr/bin/time -f "%e" ls 

có cách nào để tạo ra độ chính xác lớn hơn trong số giây đã qua không? hoặc chỉ xuất ra mili giây, không phải giây?

Trong hướng dẫn sử dụng/usr/bin/time, nó chỉ nói điều gì đó về giây, nhưng có thể có cách và ai đó có thể giúp tôi ... cảm ơn!

EDIT: Tôi biết về lệnh bash "thời gian" sử dụng định dạng của biến môi trường "TIMEFORMAT". xin lỗi, nhưng tôi không muốn thay đổi mà env-var ... dường như nguy hiểm với tôi, giải pháp nên là một cái gì đó mà không thay đổi hệ thống đang chạy ở tất cả :)

+0

Trang người đàn ông không nói gì về điều đó. Vì vậy, tôi cho rằng không thể sử dụng phiên bản * không thay đổi của thời gian. Có thể tạo bản vá cho định dạng đầu ra, nhưng tôi không biết liệu có thể có độ chính xác cao hơn hay không. – hek2mgl

+0

Chỉ cần chỉ ra cho người đọc trong tương lai rằng biến 'TIMEFORMAT' là _only_ được sử dụng để điều khiển đầu ra của lệnh' time' được dựng sẵn. Không có rủi ro liên quan đến việc thay đổi nó. –

Trả lời

26

Một khả năng là sử dụng lệnh date :

ts=$(date +%s%N) ; my_command ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds" 

%Nshould return nanoseconds, và 1 mili giây là 1000000 nano giây, do đó bằng cách phân chia sẽ quay trở lại thời gian thực hiện để thực hiện my_command trong mili giây.

LƯU Ý rằng %Nis not supported on all systems, but most of them.

+0

excelent, được chấp nhận! đã không nghĩ về ngày, nhưng đó là đủ tốt! Để nhận được từ nano giây đến mili giây, bạn phải chia cho 1000000, mặc dù: ts = $ (ngày +% s% N); ngủ 1; tt = $ ((($ (ngày +% s% N) - $ ts)/1000000)); echo $ tt – Preexo

+0

phải, cần chia cho '10^6' không phải' 10^3'. – devnull

+2

Đối với những người trên OSX không có độ phân giải thời gian bắt buộc từ ngày, người ta có thể thay thế ngày gốc bằng gdate. Ví dụ: 'pha cài đặt coreutils' nếu cần và sau đó ' ts = $ (gdate +% s% N); ngủ 1; tt = $ (((($ (gdate +% s% N) - $ ts)/1000000)); echo $ tt' [nguồn] (http://apple.stackexchange.com/questions/135742/time-in-milliseconds-since-epoch-in-the-terminal) – snodnipper

5

Để thuận tiện tôi đã trả lời devnull thành một kịch bản (tôi đặt tên nó là millisecond-time).

#!/bin/bash 
ts=$(date +%s%N) ; [email protected] ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds" 

Tôi đặt tập lệnh trong /usr/local/bin.
Gave nó thực hiện quyền chmod +x /usr/local/bin/millisecond-time.
Bây giờ tôi có thể sử dụng nó như sau: millisecond-time my_command

P.s. Đây sẽ là một bình luận nếu tôi có đại diện '.

Các vấn đề liên quan