在bash UNIX中对文件进行排序和打印

时间:2015-04-20 21:22:48

标签: bash sorting scripting

我有一个包含大量路径的文件:

7 /usr/file1564
7 /usr/file2212
6 /usr/file3542

我正在尝试使用sort拉出并打印出现次数最多的路径。这就是我到目前为止所做的:

cat temp| sort | uniq -c | sort -rk1 > temp

我不确定如何只打印最高出现次数。我也希望我的输出打印如下:

7 1564
7 2212

7是总出现次数,其他数字是名称末尾的文件号。我是新手来编写脚本,所以任何帮助都会非常感激!

2 个答案:

答案 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