Фильтр с помощью awk

  • Доброго дня.


    Мне надо из самбы вытащить имена залогиненых юзеров и одновременно по логину найти реальное имя из passwd. Получилось самбурно, поэтому поэтапно:
    1. smbstatus | grep 192.168 выдает на гора всех кто в настоящий момент залогинен в системе.
    2. smbstatus | grep 192.168 | awk '{print $2, $4}' выдает логин и имя компа.
    3. awk -F ":" '{print $5}' /etc/passwd выдает реальное имя юзера.
    Вот теперь надо все это таким образом объединить, чтобы в результате в файле стояло следующее: логин реалъное_имя имя_компа


    Поробовал
    smbstatus | grep 192.168 | awk '{nam=$2; print $2, awk -F ":" '{print nam}' /etc/passwd, $4}'
    Ошибка
    awk: {nam=$2; print $2, awk -F ":" {print
    awk:_________________________^ syntax error
    awk: cmd. line:1: {nam=$2; print $2, awk -F ":" {print
    awk: cmd. line:1: _____________________________^ unexpected newline or end of string


    Не перенимает переменную? Или где-то конкретно туплю?



    Пожалуйста зарегистрируйся для просмотра данного изображения.Пожалуйста зарегистрируйся для просмотра данного изображения.

  • Я вот тут подумал:а не в том ли проблема, что он у меня вторую кавычку перед {print принимает за закрывающую и неправилъно интерпретирует стринг? Может их закоментировать? Только как?


    free-x:
    В смысле сначала одно записать в файл, а потом добавить второе?

  • ничего не надо писать в файл. считывать в одном цикле статусы и потом грепить по имени в /etc/passwd
    Можно и без awk обойтись

  • Ну с grep же только всю строку можно выдать (а там много лишнего). И потом это не снимает проблемы: как передать переменную грепу?

  • ну это так...для примера


    for i in $(smbstatus | grep 192.168)
    do
    тут разбиваешь строку например на user & IP
    REALNAME=$(cat /etc/passwd | grep $user | cut -d: -fX)
    done

  • Как я понимаю i это строки которые выдает smbstatus? Ногами не бить - я только учусь.
    $user - по идее сюда загоняется логин из smbstatus? Но как? USER=$(smbstatus |grep 192.168) ?

  • Как мне в цикле обратиться к строке (переменная i) чтобы из нее выдрать имя?
    USER=$(cut -d" " -f6) надо же как-то сказать откуда ему cut.