Скрипт Linux, в котором отображается имя всех вошедших в систему учеников и номер их симулято - PullRequest
0 голосов
/ 15 июня 2019

Работает хорошо, но я хочу напечатать строки и сколько раз повторяется строка.

#!/bin/bash

who |grep "10\.1\.109" | grep -v berianho | cut -f1 -d " " | sort -n|

while read user 
do 
    grep -a ^$user: /etc/passwd | cut -f5 -d:
done

1 Ответ

1 голос
/ 15 июня 2019

Для новичков в командной строке Unix / Linux практически невозможно понять богатство и простоту доступных простых команд.И, хотя это легко сослаться на руководство, это, вероятно, не поможет в поиске конкретного раздела.

Но вы должны взглянуть на руководство, в вашем случае man uniq.И посмотрите конкретно на -c.

Итак, who | cut -f1 -d " " | sort -n (я пропустил grep с, потому что они действительно что-то значат в моей системе) производит:

и who | cut -f1 -d " " | sort -n | uniq -cвыдает:

   1 anneke
   2 ljm
   1 root

, что именно то, что вы просили.

Ваш цикл while должен, вероятно, считать число строк, как в

who |
  grep "10\.1\.109" | 
  grep -v berianho  | 
  cut -f1 -d " "    |
  sort -n           |
  uniq -c           |
  while read count user ; do
    echo -n "$count "
    grep -a ^$user: /etc/passwd | cut -f5 -d:
done

или что-то в этом роде.Важно видеть, что теперь вы читаете две переменные, count и user, из каждой строки вывода uniq.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...