Как прочитать awk из одного файла и сравнить его с awk из другого файла - PullRequest
1 голос
/ 10 апреля 2020

Сценарий, который у меня есть, выводит $ 1 наиболее часто регистрируемых пользователей за последние $ 2 дня

#var[$i]=$(awk -F: '{print $5}' /etc/passwd);
last -s -$2days | awk '{users[$1]++} END{for(i in users){print users[i], i}}' | sort -r | head -$1 | awk '{print $2 " -- " $1}';

, поэтому вывод следующий:

username -- (amount of logins)

Но я пытаюсь получить вывод с именем и фамилией из / etc / passwd, так что это:

first and last name, username -- (amount of logins)

Но каждая идея, которую я пытаюсь придумать, не работает для меня. Я попытался зациклить awk с / etc / passwd и затем использовать -v в другом awk или попытаться получить выходные данные 2nd awk в массив, а затем сравнить его с / etc / passwd, но я не смог заставить ни одну из них работать. У кого-нибудь есть идеи, как с этим справиться?

1 Ответ

2 голосов
/ 10 апреля 2020

Это должно позволить вам начать:

awk 'NR==FNR{name[$1]=$5;next} {u[$1]++}
    END{for(x in u)printf "%s, %s -- %d\n", name[x],x,u[x]} ' FS=":" /etc/passwd FS=" " <(last)
  • это выведет все first and last name, username -- (amount of logins) из last команды
  • , вы можете настроить команду last с помощью добавив некоторые обязательные опции
  • , sort и head опущены, я думаю, вы справитесь с этим
...