아래와 같이 여러 숫자가 포함된 파일이 있습니다.
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
나는 이것이 펄이 아니라는 것을 안다.
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'