2013-12-03 4 views
19

Я пытаюсь собрать информацию из системы, и мне нужно получить текущее время в часах и минутах.Получить текущее время в часах и минутах

В настоящее время у меня есть:

date | awk '{print $4}' 

который выдает что-то вроде:

16:18:54 

Как отрубить секунды?

+5

Зачем использовать awk? 'date' поддерживает широкий спектр символов форматирования и будет с удовольствием создавать требуемый результат, без дополнительных инструментов. 'date +% H:% M' –

+6

' date +% H:% M'? – jfs

+0

Я понял, что есть способ сделать это так. Я потерялся, прочитав страницу руководства –

ответ

39

Обеспечить формат строки:

date +"%H:%M" 

Бег man date даст все опции формата

%a  locale's abbreviated weekday name (e.g., Sun) 
%A  locale's full weekday name (e.g., Sunday) 
%b  locale's abbreviated month name (e.g., Jan) 
%B  locale's full month name (e.g., January) 
%c  locale's date and time (e.g., Thu Mar 3 23:05:25 2005) 
%C  century; like %Y, except omit last two digits (e.g., 20) 
%d  day of month (e.g., 01) 
%D  date; same as %m/%d/%y 
%e  day of month, space padded; same as %_d 
%F  full date; same as %Y-%m-%d 
%g  last two digits of year of ISO week number (see %G) 
%G  year of ISO week number (see %V); normally useful only with %V 
%h  same as %b 
%H  hour (00..23) 
%I  hour (01..12) 
%j  day of year (001..366) 
%k  hour, space padded (0..23); same as %_H 
%l  hour, space padded (1..12); same as %_I 
%m  month (01..12) 
%M  minute (00..59) 
%n  a newline 
%N  nanoseconds (000000000..999999999) 
%p  locale's equivalent of either AM or PM; blank if not known 
%P  like %p, but lower case 
%r  locale's 12-hour clock time (e.g., 11:11:04 PM) 
%R  24-hour hour and minute; same as %H:%M 
%s  seconds since 1970-01-01 00:00:00 UTC 
%S  second (00..60) 
%t  a tab 
%T  time; same as %H:%M:%S 
%u  day of week (1..7); 1 is Monday 
%U  week number of year, with Sunday as first day of week (00..53) 
%V  ISO week number, with Monday as first day of week (01..53) 
%w  day of week (0..6); 0 is Sunday 
%W  week number of year, with Monday as first day of week (00..53) 
%x  locale's date representation (e.g., 12/31/99) 
%X  locale's time representation (e.g., 23:13:48) 
%y  last two digits of year (00..99) 
%Y  year 
%z  +hhmm numeric time zone (e.g., -0400) 
%:z +hh:mm numeric time zone (e.g., -04:00) 
%::z +hh:mm:ss numeric time zone (e.g., -04:00:00) 
%:::z numeric time zone with : to necessary precision (e.g., -04, +05:30) 
%Z  alphabetic time zone abbreviation (e.g., EDT) 
0

EDIT: возгласы. Получил это назад. Я бы хотел сохранить только секунды. Под редакцией!

date +%H:%M 

Было бы проще, я думаю :). Если вы действительно хотите, чтобы отрубить секунды, вы могли бы сделать

date | sed 's/.* \([0-9]*:[0-9]*\):[0-9]*.*/\1/' 
2

вы можете использовать

date | awk '{print $4}'| cut -d ':' -f3 

, как у упомянутых, используя только date|awk '{print $4}' команду дает что-то вроде этого

20:18:19 

так поскольку мы можем видеть, хотим ли мы извлечь часть этой строки, тогда нам нужен делиметр, для нашего случая это :, поэтому мы решаем нарезать на основе :. Теперь этот деликт будет измельчать строку в трех частях, то есть 20, 18 и 19, так как мы хотим использовать вторую, которую мы используем -f2 в нашей команде. Подведение итогов,

cut: отбивает некоторую строку на основе деминера.

-d: разделитель (здесь :)

-f2: отрубленная маркер, который мы хотим.

Смежные вопросы