ম্যাক ওএস এক্স এর অধীনে মিলিশেকেন্ডে বাশ কার্যকর করার সময় কীভাবে পাবেন?


12

আমি চেক করেছি এই , কিন্তু প্রদত্ত সমাধান আমার জন্য কাজ করে নি।

তারিখটি ব্যবহার করে আমি সেকেন্ডে ফাঁসির সময় পেতে পারি:

T="$(date +%s)"
#some work here
T="$(($(date +%s)-T))"
echo "execution time (secs) ${T}"

যাইহোক, যখন আমি এটি চেষ্টা করি:

T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"

ন্যানো-দ্বিতীয় নির্ভুলতা পেতে তারিখে% N যুক্ত করা (উপরে হিসাবে) আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: -ব্যাশ: 1369320760N: বেসের জন্য খুব বড় মান (ত্রুটি টোকেন "1369320760N")

কেউ কি জানেন যে ম্যাক ওএস এক্স এর অধীনে ব্যাশ ব্যবহার করে মিলিসেকেন্ডে কার্যকর করার সময়টি কীভাবে পরিমাপ করতে হয়?


আপনার কি সত্যিই ন্যানো দ্বিতীয় রেজোলিউশন দরকার? এই পদ্ধতির আপনার প্রচুর ওভারহেড রয়েছে। সঙ্গে # some work hereommited, আমি 0.2 থেকে 0.3 সেকেন্ড বার পেতে - কি শূন্য (বা অন্তত ধ্রুবক) আপনার লক্ষ্য পৌঁছানোর হওয়া উচিত। যেখানে /usr/bin/time usleep 500000.05 +/- 0.01 সেকেন্ডের একটি যুক্তিসঙ্গত স্থিতিশীল সময় দেয়। (কেবলমাত্র লিনাক্সে পরীক্ষিত, / ইউএসআর / বিন / সময় এবং / অথবা ইউএসএক্স-এ ইউএসপি উপলব্ধ কিনা তা জানেন না))
এমপি এম

আপনি কি নিশ্চিত যে অভ্যন্তরীণ ঘড়ির রেজোলিউশনটি ন্যানো-দ্বিতীয় স্তরের নিচে অবিচ্ছিন্ন রেজোলিউশন সরবরাহ করে?
এমডিপিসি

উত্তর:


13

যেহেতু ওএসএক্স একটি বিএসডি-ইশ সিস্টেম, এটির স্ট্রফটাইম লাইব্রেরিটি নেই %N( http://www.freebsd.org/cgi/man.cgi?query=date )

বাশ বিল্টিন timeকমান্ড কি আপনাকে প্রয়োজনীয় তথ্য দেয়?

time some work here

2
এটি পরিষ্কার করে দেওয়ার জন্য ধন্যবাদ, সময় নিখুঁতভাবে কাজ করে এবং তিনটি ফলাফল আউটপুট করে, তবে আমার প্রাথমিক এবং চূড়ান্ত সময়ের সাথে বিশেষভাবে কাজ করা দরকার।
প্যাকোডেলবার্গ

8

আমার যদি মিলি সেকেন্ডের প্রয়োজন হয় এবং বিএসডি তারিখ সমর্থন না করে তবে আমি এই পথে যাব +%s%N

perl -MTime::HiRes -e 'printf("%.0f\n",Time::HiRes::time()*1000)'

ধন্যবাদ !!! এই সমাধানটি কেউই চারপাশে খবর
ড্যানিয়েল বি

2

echo $(($(date +%s%N)/1000000))

এটি ন্যানো-সেকেন্ড থেকে মিলি-সেকেন্ডে রূপান্তরিত হবে।

@ এমপি থেকে, date +%s.%Nকাজ করে।

লিনাক্স এবং ওএস এক্স এর মধ্যে আউটপুট আলাদা যদিও
লিনাক্স: 1369322592.573787111
ওএস এক্স:1369322610.N


আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি: -বাশ: 1369321446N: বেসের জন্য খুব ভাল মান (ত্রুটি টোকেন "1369321446N") এটি ম্যাক অক্সে কাজ করে না, আমি পাচ্ছি:
প্যাকোডেলবার্গ

ঠিক আছে, এটি বিরক্তিকর ... (ভুল উইন্ডোতে পরীক্ষিত) একই ত্রুটিটি দেখছে: /
ক্ষয়ক্ষতি

1
আউটপুট ভাগ করার দরকার নেই, কেবল ব্যবহার করুন date +%s.%N(তবে আমি ওএসএক্স পরীক্ষা করতে পারি না; এটি লিনাক্সে কাজ করছে) working কিন্তু সমস্যা তারপর, যে bashএর $(( ))এই প্রোগ্রামটিতে ফ্লোটিং পয়েন্ট সংখ্যার হ্যান্ডেল করতে সক্ষম নয়।
এমপি

@ এমপি এটি ওএসকে কাজ করে। প্রথম 10 টি অক্ষর একই, লিনাক্স এবং ওএস এক্স এর মধ্যে ভিন্নভাবে কাজ করে।
অচপল

তার মানে কি আমরা তারিখটি ব্যবহার করে ন্যানো দ্বিতীয় তথ্য পেতে পারি না?
প্যাকডেলবার্গ

2

আপনি যদি ইনস্টল করেন তবে লিখিতভাবে coreutilsজিএনইউ লিনাক্স ব্যবহার করতে পারেন ।dategdate

coreutils Homebrew সঙ্গে উপলব্ধ: brew install coreutils


1

অন্য উত্তরের বর্ণিত হিসাবে, ওএস এক্সের তারিখ% N (ন্যানোসেকেন্ডস) সমর্থন করে না।

আপনি কি স্ক্রিপ্ট হিসাবে কমান্ডগুলি সময়মতো সংরক্ষণ করতে পারেন? বা তাদের জন্য একটি সাব-শেল বা কমান্ড গ্রুপ ব্যবহার করুন:

time (sleep 0.1; echo a; sleep 0.1)
time { sleep 0.1; echo a; sleep 0.1; }

অথবা পৃথক আদেশের সময়গুলি যোগ করুন:

$ time=$(TIMEFORMAT=%R; (time sleep 0.1; echo a) 2>&1 > /dev/null)
$ time+=+$(TIMEFORMAT=%R; (time sleep 0.1) 2>&1)
$ bc <<< $time
.206

অথবা কিছু স্ক্রিপ্টিং ভাষা ব্যবহার করুন:

$ ruby -e 'puts "%.3f" % Time.now'
1369329611.046
$ time ruby -e '""'
0.029
$ time ruby -e 'puts "%.3f" % Time.now'
1369329622.943
0.029

%.3f3 দশমিক পয়েন্ট সহ ভাসমান পয়েন্ট সংখ্যাটির জন্য একটি ফর্ম্যাট স্পেসিফায়ার। টাইম.নো সময় শ্রেণীর একটি শ্রেণিবদ্ধ পদ্ধতি।


আপনার উত্তরের জন্য ধন্যবাদ, আপনি দয়া করে উপরের রুবি কোডটি বর্ণনা করতে পারেন?
প্যাকডেলবার্গ

1
ইন ruby -e 'puts "%.3f" % Time.now', rubyরুবি ইন্টারপ্রেটারকে কল -eকরে, কমান্ড লাইনের নীচে থাকা স্ক্রিপ্টটি কার্যকর করে। putsএটি রুবি printf(সাজানো), Timeএকটি রুবি অবজেক্ট এবং Time.nowযুগের পরের কয়েক সেকেন্ড। ব্যবহার %.3fট্রিম 3 দশমিক স্থান আউটপুট, যা মিলিসেকেন্ড হয় ( ".046" এবং ".943" আউটপুট অংশগুলি।)
Olie

1
এছাড়াও, timeএকটি কমান্ড লাইন সরঞ্জাম যা নিম্নলিখিত কমান্ডটি চালাতে কত সময় নেয় times দেখুন man timeআরো বিস্তারিত জানার জন্য।
অলি

1

গ্লেন ঠিক বলেছেন, timeআপনি যে কমান্ডটি সন্ধান করছেন তা হ'ল তবে আপনি যে তথ্যটি চান তা পার্স করার জন্য আপনাকে এটি অন্য কোনও প্রসেসরের মতো পাস করতে হবে sed

time command-goes-here >/dev/null 2>$1|sed rules-go-here

এই কমান্ডটি কমান্ড নিজেই আউটপুট থেকে মুক্তি পাবে (স্ট্যান্ডার্ড এবং ত্রুটি উভয় আউটপুটগুলি / dev / নালকে প্রেরণ করে) এবং সময় ফলাফলকে সেডে পাস করবে, যেখানে আপনাকে স্ট্রিম এবং আউটপুট সম্পাদনা করার জন্য উপযুক্ত নিয়ম বেছে নিতে হবে পছন্দসই মান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.