Как найти наиболее распространенное имя в файле passwd

Я включил виртуализацию ПК в BIOS, отключил Hyper-V в Windows и установил пакет расширения VirtualBox.

0
13.04.2017, 15:36
2 ответа

Использование awk и сортировка, чтобы сначала указать наиболее распространенное имя:

awk -F: '{sub(/[.].*/, "", $5); a[$5]++} END{for (n in a)print a[n],n}' /etc/passwd | sort -nr

Для версии без учета регистра:

awk -F: '{sub(/[. ,].*/, "", $5); a[tolower($5)]++} END{for (n in a)print a[n],n}' /etc/passwd | sort -nr

Для тех, кто предпочитает свои команды, распространять на нескольких строках:

awk -F: '
  {
    sub(/[.].*/, "", $5)
    a[$5]++
  }

  END{
    for (n in a)
      print a[n],n
  }
  ' /etc/passwd | sort -nr

Как это работает

  • -F:

    Это делает : разделителем полей.

  • подпункт (/ [.].* /, "", $ 5)

    Удаляет все, что находится после первого периода из поля 5.

  • a [$ 5] ++

    Подсчет количества появлений этого имени сохраняется в ассоциативном массиве a . Это увеличивает счетчик. Для версии без учета регистра это заменяется на a [tolower ($ 5)] ++ .

  • END {for (n in a) print a [n], n}

    Это печатает счетчик и имя для всех результатов, которые мы имеем в массиве a .

  • sort -nr

    Сортировка вывода по убыванию.

2
28.01.2020, 02:13

Один из способов сделать это:

cut -d: -f5 /etc/passwd | \
    sed 's/\..*//' | \
    sort -i | \
    uniq -ci | \
    sort -rn
6
28.01.2020, 02:13

Теги

Похожие вопросы