AFP*_*FPP 11 perl text-processing
我有一个包含多个数字的文件,如下所示。
21 12 33 35 21 12 33 44 52 63 14 12 23 34 11 12 13 53 1 12 43 33 44
Run Code Online (Sandbox Code Playgroud)
我怎样才能找到这些值的最大值,即63
?我想使用,stats
但我的机器上似乎不存在此命令,我不想安装它。我怎样才能接近使用perl
?
fed*_*qui 23
其他答案非常好,Perl / awk 是要走的路。
只是为了好玩,你也可以使用这个(假设 GNU grep
):
$ grep -Eo '[0-9]+' file | sort -rn | head -n 1
63
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我知道这不是 perl:
awk '{for(i=1;i<=NF;i++) if($i>maxval) maxval=$i;}; END { print maxval;}' file
Run Code Online (Sandbox Code Playgroud)
使用List::Util
(自 5.8 以来的标准库的一部分,否则在 CPAN 上可用):
perl -MList::Util=max -lane 'print max(@F)'
Run Code Online (Sandbox Code Playgroud)
另一种perl
解决方案:
$ perl -MList::Util=max -anle 'print max(@F)' file
63
Run Code Online (Sandbox Code Playgroud)
这将适用于包含一行的文件,如果文件中有多行,并且想要在所有行中找到最大值,请尝试:
$ perl -MList::Util=max -alne '$tmp = max @F; $max = $tmp if $max < $tmp; END { print $max }'
Run Code Online (Sandbox Code Playgroud)