passwd 파일에서 가장 일반적인 이름을 찾는 방법

passwd 파일에서 가장 일반적인 이름을 찾는 방법

/etc/passwd사용자 목록의 형식은 다음과 같습니다.

username:password:uid:gid:firstname.lastname, somenumber:/...

표적:이름을 확인한 다음 가장 일반적인 이름이 먼저 나타나고 두 번째로 흔한 이름이 두 번째로 나타나도록 정렬하고 싶습니다.

나도 좀 봤어해결책두 번째 부분을 수행하는 방법은 지도에서 읽는 것이 아니라 텍스트 파일 처리와 관련되어 있지만.

첫 번째 부분에서는 실제로 무엇을 해야 할지 몰랐습니다. 몇 가지 해결책이 있다는 것을 알고 있지만 어떻게 해야 할지 모르겠습니다.

답변1

한 가지 방법은 다음과 같습니다.

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

답변2

awk 및 sort를 사용하여 가장 일반적인 이름을 먼저 입력하세요.

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:

    이렇게 하면 :필드 구분 기호가 활성화됩니다.

  • sub(/[.].*/, "", $5)

    이렇게 하면 필드 5의 첫 번째 기간 이후의 모든 항목이 제거됩니다.

  • a[$5]++

    이름의 발생 횟수는 연관 배열에 저장됩니다 a. 그러면 카운터 값이 증가합니다. 대소문자를 구분하지 않는 버전의 경우 로 대체됩니다 a[tolower($5)]++.

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

    그러면 배열에 있는 모든 결과의 개수와 이름이 인쇄됩니다 a.

  • sort -nr

    그러면 출력이 숫자 내림차순으로 정렬됩니다.

관련 정보