我有一个包含大量路径的文件:
7 /usr/file1564
7 /usr/file2212
6 /usr/file3542
我正在尝试使用sort
拉出并打印出现次数最多的路径。这就是我到目前为止所做的:
cat temp| sort | uniq -c | sort -rk1 > temp
我不确定如何只打印最高出现次数。我也希望我的输出打印如下:
7 1564
7 2212
7是总出现次数,其他数字是名称末尾的文件号。我是新手来编写脚本,所以任何帮助都会非常感激!
答案 0 :(得分:2)
要仅发出第一行输出(编号最高,因为您之前要立即执行反向数字排序),请通过head -n1
。
要删除所有不是数字或空格的内容,请通过tr -cd '0-9[:space:]'
。
仅过滤具有最高编号的值,允许存在多个值:
{
read firstnum name && printf '%s\t%s\n' "$firstnum" "$name"
while read -r num name; do
[[ $num = $firstnum ]] || break
printf '%s\t%s\n' "$num" "$name"
done
} < temp
答案 1 :(得分:1)
如果你想避免排序并且你被允许使用awk,那么你可以这样做:
awk '{
if($1>maxcnt) {s=$1" "substr($2,10,4); maxcnt=$1} else
if($1==maxcnt) {s=s "\n"$1" "substr($2,10,4)}} END{print s}' \
temp