![資料集中出現次數最多的名稱](https://rvso.com/image/38696/%E8%B3%87%E6%96%99%E9%9B%86%E4%B8%AD%E5%87%BA%E7%8F%BE%E6%AC%A1%E6%95%B8%E6%9C%80%E5%A4%9A%E7%9A%84%E5%90%8D%E7%A8%B1.png)
users directory
----------------------
hjsyeh hellodir ;
awgshd newdir;
hjsyeh hidir;
jkdhjk welcomedir
上面給出的是一組使用者及其建立的目錄。
我的輸出應該是
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