查找文件中的最大值

查找文件中的最大值

我有一个包含多个数字的文件,如下所示。

21 12 33 35 21 12 33 44 52 63 14 12 23 34 11 12 13 53 1 12 43 33 44

我怎样才能找到这些值的最大值,即63?我想使用,stats但我的机器上似乎不存在这个命令,我不想安装它。我该如何使用perl

答案1

其他答案非常好,Perl / awk 是最佳选择。

只是为了好玩,你也可以使用这个(假设是 GNU grep):

$ grep -Eo '[0-9]+' file | sort -rn | head -n 1
63

解释

  • grep -Eo '[0-9]+' file打印文件中正十进制整数的所有匹配项。根据-o标志,每场比赛都会打印在不同的行中。
  • sort -rn按数字顺序对列表进行反向排序,使第一个数字最大。
  • head -n 1打印第一行。

按步骤:

$ grep -Eo '[0-9]+' file
21
12
33
35
21
12
33
44
52
63
14
12
23
34
11
12
13
53
1
12
43
33
44
$ grep -Eo '[0-9]+' file | sort -rn 
63
53
52
44
44
43
35
34
33
33
33
23
21
21
14
13
12
12
12
12
12
11
1

答案2

我知道这不是 perl:

awk '{for(i=1;i<=NF;i++) if($i>maxval) maxval=$i;}; END { print maxval;}' file

答案3

使用List::Util(自 5.8 起成为标准库的一部分,否则可在 CPAN 上使用):

perl -MList::Util=max -lane 'print max(@F)'

答案4

这是一种更快的 Perl 方法,不需要排序:

$ echo '21 12 33 35 21 12 33 44 52 63 14 12 23 34 11 12 13 53 1 12 43 33 44' |
    perl -lane 'map{$m=$_ if $_>$m}@F; print $m'

或者,正如 @Gnouc 在评论中建议的那样:

$ echo '21 12 33 35 21 12 33 44 52 63 14 12 23 34 11 12 13 53 1 12 43 33 44' |
    perl -lane '$m<$_ and $m=$_ for @F; print $m'

相关内容