आप gawk
(या awk
, यदि आपके /etc/alternatives/awk
अंक /usr/bin/gawk
) का उपयोग कर सकते हैं :
ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
यह अचु के उत्तर में दृष्टिकोण के समान है , लेकिन एक शेल लूप के बजाय ping
आउटपुट को पाइप किया gawk
जाता है जो कॉल करता है date
। उस दृष्टिकोण के साथ, यह बिना काम करता है -c
, लेकिन यदि आप n पिंग के बाद पिंग स्टॉप बनाने के लिए पास नहीं करते हैं , और आप लूप को + के साथ रोकते हैं , तो सामान्य आंकड़े प्रिंट नहीं करेंगे।-c n
CtrlCping
ek@Io:~$ ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Tue 03 Jan 2017 10:09:51 AM EST: PING www.google.fr (216.58.193.99) 56(84) bytes of data.
Tue 03 Jan 2017 10:09:51 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=1 ttl=51 time=327 ms
Tue 03 Jan 2017 10:09:52 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=2 ttl=51 time=302 ms
Tue 03 Jan 2017 10:09:53 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=3 ttl=51 time=282 ms
Tue 03 Jan 2017 10:09:54 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=4 ttl=51 time=349 ms
Tue 03 Jan 2017 10:09:54 AM EST:
Tue 03 Jan 2017 10:09:54 AM EST: --- www.google.fr ping statistics ---
Tue 03 Jan 2017 10:09:54 AM EST: 4 packets transmitted, 4 received, 0% packet loss, time 3003ms
Tue 03 Jan 2017 10:09:54 AM EST: rtt min/avg/max/mdev = 282.035/315.227/349.166/25.398 ms
ek@Io:~$ ping www.google.fr | gawk '{print strftime("%c: ") $0}'
Tue 03 Jan 2017 10:10:35 AM EST: PING www.google.fr (216.58.193.99) 56(84) bytes of data.
Tue 03 Jan 2017 10:10:35 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=1 ttl=51 time=305 ms
Tue 03 Jan 2017 10:10:35 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=2 ttl=51 time=365 ms
Tue 03 Jan 2017 10:10:36 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=3 ttl=51 time=390 ms
Tue 03 Jan 2017 10:10:38 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=4 ttl=51 time=824 ms
Tue 03 Jan 2017 10:10:38 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=5 ttl=51 time=287 ms
^C
ऐसा होता है कि क्या ping
आउटपुट आउटपुट पाइप gawk
या शेल while
लूप में है। कारण यह है कि पाइप के दाईं ओर स्थित कमांड, इसके बजाय SIGINTping
को प्राप्त करता है , जब + दबाया जाता है, और समाप्त होने से पहले आंकड़े प्रिंट करना नहीं जानता है।CtrlCping
यदि आप एक पाइप के बाईं ओर के ping
बिना चलाए हैं -c
(जैसा कि ऊपर दिखाया गया है) और आप इसे इस तरह से समाप्त करना चाहते हैं कि यह अभी भी आँकड़ों को प्रिंट करता है, तो इसके बजाय टर्मिनल में Ctrl+ Cदबाएं जहां यह चल रहा है, आप चला सकते हैं एक अन्य टर्मिनल से, कमांड की प्रक्रिया आईडी के साथ बदल रहा है । यदि आप केवल एक उदाहरण चला रहे हैं तो आप बस उपयोग कर सकते हैं ।kill -INT PID
PID
ping
ping
killall -INT ping
वैकल्पिक रूप से, आप ping
पाइप के बाईं ओर कमांड को एक कमांड के साथ बदल सकते हैं जो एक शेल चलाता है, उस शेल की प्रक्रिया आईडी की रिपोर्ट करता है, और फिर उस शेल को ping
कमांड के साथ बदल देता है (इसके कारण समान पीआईडी है):
sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'
फिर आउटपुट की पहली पंक्ति, ping
कमांड की प्रक्रिया आईडी दिखाएगी (जो आमतौर पर हर बार अलग होगी)। यह इस तरह दिखेगा, लेकिन एक अलग समय और तारीख और शायद एक अलग प्रक्रिया आईडी के साथ:
Tue 20 Mar 2018 12:11:13 PM EDT: 7557
फिर, दूसरे टर्मिनल से, आप चलाए गए वास्तविक प्रक्रिया आईडी के साथ kill -INT 7557
बदल सकते हैं , कमांड को इस तरह 7557
से समाप्त ping
कर सकते हैं ताकि इसे आंकड़े प्रिंट करने का कारण बन सके।
(यदि आप अपने शेल के जॉब कंट्रोल फीचर्स का लाभ उठाते हैं , तो आप इसे उसी टर्मिनल के भीतर भी प्राप्त कर सकते हैं, लेकिन यदि आप अपने टर्मिनल से टेक्स्ट को कॉपी करना चाहते हैं, तो बिना किसी बाहरी भाग को हटाने के, जहां आप उस टर्मिनल में कमांड चलाते थे, तब आपको ping
एक अलग टर्मिनल से समाप्त होना चाहिए ।)
आगे की पढाई: