2015-04-20 95 views
0

我有一大堆的路径的文件,看起来像这样:排序并打印在bash文件UNIX

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

我试图用sort拉出并与打印路径(S)大多数情况下。这是我到目前为止有:

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

我不确定如何只打印最高的发生。我也想打印像这样我的输出:

7 1564 
7 2212 

7是事件和其他数字在名称的结尾是文件编号的总数。我对bash脚本编程颇为陌生,所以任何帮助都将不胜感激!

+1

您是否至少有两个其他问题已经涉及此问题? –

+0

...您对“最高出现次数”的标准是什么? – ptierno

+0

这是我关于这个特定问题的第二个问题,但我决定删除它并制作一个新的问题,因为它措辞不佳,没有答案。 – Will

回答

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 
+0

可能有不止一个最高的数字。我该怎么处理? – Will

+0

多数民众赞成在那里我问你有关的标准。 – ptierno

+1

在这种情况下,你要么使用awk,要么使用具有逻辑的“while read”循环。 –

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