users directory
----------------------
hjsyeh hellodir ;
awgshd newdir;
hjsyeh hidir;
jkdhjk welcomedir
위에는 사용자 집합과 이들이 생성하는 디렉터리가 나와 있습니다. Unix 쉘 스크립트에서 생성된 더 많은 수의 디렉토리를 가진 사용자의 합계를 얻는 방법은 무엇입니까?
내 출력은
hjsyeh -2 directories
답변1
당신은 그것을 사용할 수 있습니다
echo "hjsyeh hellodir ; awgshd newdir; hjsyeh hidir; jkdhjk welcomedir" | \
sed -e "s/;\s*/\n/g" | awk '{print $1 }' | sort | uniq -c
출력은 다음과 같습니다.
1 awgshd
2 hjsyeh
1 jkdhjk
편집하다:
다른 호출을 통해 요청된 형식으로 출력 awk
:
echo "hjsyeh hellodir ; awgshd newdir; hjsyeh hidir; jkdhjk welcomedir" |
sed -e "s/;\s*/\n/g" | awk '{print $1 }' | sort | uniq -c |
awk '{ printf "%s -%s directories\n" , $2 , $1 }'
산출:
awgshd -1 directories
hjsyeh -2 directories
jkdhjk -1 directories
답변2
일방 perl
통행:
$ perl -anle '
$h{$F[0]}++;
END {
$key_max = (sort { $h{$b} <=> $h{$a} } keys %h)[0];
print "$key_max - $h{$key_max} directories";
}
' file
hjsyeh - 2 directories
이 솔루션은 데이터가 작은 경우 매우 효과적입니다. 더 큰 파일의 경우 Perl 내장 기능 중 일부를 사용하여 each
해시 를 반복 해야 keys
합니다 .values
$ perl -anle '
$h{$F[0]}++;
END {
while (($k,$v) = each %h) {
if ($v > $max_val) {
$max_key = $k;
$max_val = $v;
}
}
print "$max_key - $max_val directories";
}
' file
hjsyeh - 2 directories