이 스크립트의 출력 라인을 고유하게 인쇄하고 각 라인의 반복 횟수를 인쇄하는 방법 [닫기]

이 스크립트의 출력 라인을 고유하게 인쇄하고 각 라인의 반복 횟수를 인쇄하는 방법 [닫기]
#!/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

간단한 Perl 스크립트...

#!/usr/bin/perl

my %hash;

open FH, 'who |' or die;
while ( <FH> ) {
   $hash{$1}++ if /^(\S+).*(10\.\d+\.\d+\.\d+)/;
}
close FH;

while ( ($k,$v) = each %hash ) {
   printf "%3d %s\n", $v, $k;
}

exit;

답변2

이것이 당신이 원하는 것에 대한 나의 가정입니다.

#!/bin/bash
list="$(who |grep "10\.1\.109" | grep -v berianho | cut -f1 -d " ")"
unique="$(echo ${list} | tr ' ' '\n' | sort | uniq)"

for student in $unique
do
  echo "Student $(grep -a ^${student}: /etc/passwd | cut -f5 -d ":" ) has number of $(echo "$list" | tr ' ' '\n' | grep ${student} | wc -l) logins."
done

예제 출력에서는 AAA에 대한 항목 3개(passwd에 AAA AAA로 명명됨), BBB에 대해 1개의 항목(passwd에 BBB BBB로 명명됨), CC에 대한 항목 1개(passwd에 CCC CCC로 명명됨)가 있다고 가정합니다 who. 출력은 다음과 같아야 합니다.

Student AAA AAA has number of 3 logins.
Student BBB BBB has number of 2 logins.
Student CCC CCC has number of 1 logins.

관련 정보