who | sed как выцарапать дату и время ?

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
konstantine
ефрейтор
Сообщения: 55
Зарегистрирован: 2009-03-14 11:51:17

who | sed как выцарапать дату и время ?

Непрочитанное сообщение konstantine » 2009-10-13 7:17:05

Здравствуйте!

Возникла такая проблема хочу с помощью команды who на shell`e извлеч в переменные DATE и TIME дату и время уже зная при этом логин пользователя

Логин пользователся я извлекаю таким методом:

Код: Выделить всё

cd ~
LOGIN=`pwd | sed 's/\/home\///'`  #- это на линуксе, на фре пришлось бы
LOGIN=`pwd | sed 's/\/usr\/home\///'`
Изучать шелл начал только вчера поэтому пока не хватает опыта самому додуматься
who | sed 'а дальше ступор' , т.к. who может выдать:

Код: Выделить всё

konstantine :0           2009-10-13 08:35
konstantine pts/0        2009-10-13 08:35 (:0.0)
а может выдать:

Код: Выделить всё

ok_mtv   pts/1        2009-10-13 07:29
finknv   pts/6        2009-10-13 07:30
dir_sda  pts/10       2009-08-25 07:38
fin_ojm  pts/11       2009-10-13 07:37
ok_znm   pts/13       2009-10-13 07:39
ok_aiv   pts/15       2009-10-13 07:39
omis_pmu pts/21       2009-10-05 15:37
fin_ngg  pts/22       2009-10-13 07:46
fin_chaa pts/26       2009-10-13 07:47
fin_kip  pts/36       2009-10-13 08:54
omts-2   pts/40       2009-10-12 08:22
finbni   pts/47       2009-10-13 09:23
ok_aiv   pts/16       2009-10-13 07:39
fin_don  pts/42       2009-10-12 08:30
omis_piia pts/32       2009-10-13 08:39
finknv   pts/3        2009-10-13 07:30
omis_oks pts/25       2009-10-06 07:31
omis_puw pts/50       2009-08-20 13:14
ok_qqq   pts/28       2009-10-13 07:51
omis_toi pts/51       2009-08-27 09:24
omis_ksen pts/55       2009-10-13 09:41
ivc_sna  pts/56       2009-10-12 13:19
omis_puw pts/59       2009-09-17 11:40
fin_ptn  pts/18       2009-10-13 07:43
fin_kls  pts/5        2009-08-19 14:34
omis_puw pts/31       2009-09-21 10:00
dir_chsp pts/60       2009-09-21 14:36
ivc_kss  pts/61       2009-10-13 10:51
kos      pts/64       2009-10-13 11:13 (192.168.222.32)
admin    pts/63       2009-10-13 11:05
dir_kuch pts/65       2009-08-24 15:11
fin_aak  pts/53       2009-10-13 09:33
а мне допустим нужно знать когда и во сколько залогинился например пользователь kos
@lissyara: Решений "искаропки" под конкретную задачу - катастрофически мало.
Любое боле-мене серьёзное решение - это кручение коробки под себя.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
konstantine
ефрейтор
Сообщения: 55
Зарегистрирован: 2009-03-14 11:51:17

Re: who | sed как выцарапать дату и время ?

Непрочитанное сообщение konstantine » 2009-10-13 8:38:27

Всё решил проблему вот так:

Код: Выделить всё

DATE_ON=`who -m | while read a b DATE_ON TIME_ON; do echo $DATE_ON; done`
TIME_ON=`who -m | while read a b DATE_ON TIME_ON; do echo $TIME_ON; done`
echo DATE_ON=$DATE_ON
echo TIME_ON=$TIME_ON
При работе выдаёт так:

Код: Выделить всё

konstantine@konstantine:~/bin> sh test.sh
DATE_ON=2009-10-12
TIME_ON=16:38
@lissyara: Решений "искаропки" под конкретную задачу - катастрофически мало.
Любое боле-мене серьёзное решение - это кручение коробки под себя.

Аватара пользователя
konstantine
ефрейтор
Сообщения: 55
Зарегистрирован: 2009-03-14 11:51:17

Re: who | sed как выцарапать дату и время ?

Непрочитанное сообщение konstantine » 2009-10-14 4:20:15

млин в некоторых ситуациях who -m ничего не отображает, поэтому пришлось чуток доработать, воть:

Код: Выделить всё

DATE_ON=`/usr/bin/who | while read a b DATE_ON TIME_ON c; do if test "$LOGIN"=$a; then /bin/echo $DATE_ON; exit; fi done`
TIME_ON=`/usr/bin/who | while read a b DATE_ON TIME_ON c; do if test "$LOGIN"=$a; then /bin/echo $TIME_ON; exit; fi done`
@lissyara: Решений "искаропки" под конкретную задачу - катастрофически мало.
Любое боле-мене серьёзное решение - это кручение коробки под себя.