Как вывести имя пользователя, полное имя и время входа из пальца в столбцы? Я использую bash на openSUSE13.1.

В основном у меня есть три пользователя, вошедших в мою машину прямо сейчас. Тестовый пользователь 1, тестовый пользователь 2 и тестовый пользователь 3.

Я хотел бы использовать палец, чтобы получить имя пользователя, полное имя и время, когда они вошли в систему.

Я хотел бы вывести информацию следующим образом:

Login        Name            Login Time

testuser1    Test User1      1300

testuser2    Test User2      1600

testuser3    Tesr User3      1930

У меня есть две вкладки между логином и именем и три вкладки между временем входа. То же самое касается информации о пользователе под каждым заголовком.

Я не могу понять, как очень хорошо вытащить эти данные из пальца, и я абсолютно не могу понять, как получить информацию в красивые, аккуратные, читаемые столбцы. Заранее благодарю за любую помощь!


person user3347022    schedule 25.02.2014    source источник


Ответы (3)


Это может быть не идеально, поэтому вам придется поиграть с substr начальной и конечной точками. Должно быть достаточно хорошо, чтобы вы начали:

finger -s testuser1 testuser2 testuser3 | awk '{print substr($0,1,31),substr($0,46,14)}'
person jaypal singh    schedule 25.02.2014
comment
Очень близко, я ничего не знаю о substr и только немного о awk. Хотя очень близко! Спасибо, я думаю, что я могу получить то, что мне нужно с этим! - person user3347022; 25.02.2014
comment
Кстати, спасибо за правку. Хотел бы я знать, как ты сделал этот взгляд. Я чувствую, что буду здесь много раз разбираться во всем этом, и я могу рассказать, как форматирование и тому подобное очень полезно для всех вас, знающих волшебников сценариев! Спасибо еще раз! - person user3347022; 25.02.2014
comment
@ user3347022 Не за что. Вот хороший обзор awk строковых функций . Вы можете переключаться с помощью substr, чтобы получить желаемый результат. Удачи! :) - person jaypal singh; 25.02.2014
comment
@user3347022 Это должно помочь вам с форматированием здесь, в Stack Overflow. - person jaypal singh; 25.02.2014
comment
@ jaypal Последний вопрос, в finger -s это дает мне три итерации моего входа в систему. Логин консоли, мой пользовательский логин и мой терминал. Я пытался использовать uniq, чтобы получить только данные для входа в систему от finger -s. Какие-нибудь мысли? - person user3347022; 25.02.2014
comment
@user3347022 user3347022 Вы можете использовать !a[$1]++ для фильтрации дубликатов. Что-то вроде finger -s ... | awk '!a[$1]++{print substr($0,1,31),substr($0,46,14)}' - person jaypal singh; 25.02.2014
comment
@jaypal Чистое золото! Потрясающий! - person user3347022; 25.02.2014

Попробуйте :r!finger. На моем Mac я получаю хорошие столбцы. YMMV.

:help :r!
person benjifisher    schedule 25.02.2014
comment
Думаю, мне следовало упомянуть, что я на openSUSE13.1, я безуспешно пробовал ›r!finger, спасибо! - person user3347022; 25.02.2014
comment
Первоначально этот вопрос был помечен тегом vim, и я давал вам возможность прочитать вывод finger в текущий буфер. Следовательно, ведущий :. - person benjifisher; 25.02.2014
comment
О, круто, я супер новенький. Извините за мою путаницу и спасибо! - person user3347022; 27.02.2014

Вот еще один способ использования awk:

finger -l | awk '{ split($1, a, OFS); print a[2], a[4], substr($3, 20, 6) }' FS="\n" RS= | column -t

Флаг -l для finger создает многострочный формат (и совместим с флагом -s). Это полезно, когда такие поля, как «имя», отсутствуют. Затем мы можем обработать записи, используя awk в режиме абзаца. В моем примере выше вы можете настроить подстроку в соответствии со спецификацией даты по вашему выбору. Если у вас есть gawk, у вас будет доступ к некоторым функциям времени. это может вас заинтересовать, если вы хотите изменить спецификацию. Наконец, вы можете напечатать интересующие поля в column -t для красивой печати. ХТН.

person Steve    schedule 25.02.2014