누군가 awk, sed 또는 일부 유닉스 쉘 프로그램을 사용하여 가장 큰 양수를 찾는 방법을 말해 줄 수 있습니까? 저는 Linux RHEL과 KSH를 사용하고 있습니다. 입력에는 8개의 데이터 열이 있을 수 있으며 N/A는 가능한 값 중 하나입니다.
SAMPLE INPUT
1252.2 1251.8 N/A N/A
-31.9 -33.2 N/A N/A
-1172.4 -1174.4 N/A N/A
-6.5 -6.4 N/A N/A
-.3 -.3 N/A N/A
1351.8 1351.8 N/A N/A
38.3 38.0 N/A N/A
-21.6 -21.9 N/A N/A
-4.7 -4.5 N/A N/A
-5.0 -2.9 N/A N/A
3.1 3.3 N/A N/A
-20.1 -20.3 N/A N/A
-199.1 -199.3 N/A N/A
346.5 346.7 N/A N/A
-.8 -.4 N/A N/A
14.8 14.7 N/A N/A
8.4 8.4 N/A N/A
-18.2 -18.2 N/A N/A
-43.7 -43.6 N/A N/A
원하는 출력
Largest number is 1351.8
답변1
Awk를 사용하여 N/A
항목에 대한 수치 계산을 강제합니다.
awk '{for (i=1;i<=NF;i++) max = $i+0 > max ? $i : max} END{print "Largest number is " max}' data
답변2
한 가지 접근 방식은 다음과 같습니다.
perl -lane '$_>$m and $m=$_ for @F}{print $m' sample.txt
설명하다:
-n
옵션은 입력 파일을 한 줄씩 처리합니다.-e
옵션은 입력 읽기의 각 행에 따라 Perl 코드를 적용합니다.-a
옵션은 개별 필드를 읽을 때 각 행을 분할하여 배열에 저장합니다@F
.-l
옵션은 RS=ORS="\n"을 만듭니다.for @F
각 필드는 현재 필드가 에 저장되어 반복됩니다$_
.현재 필드를 최대값과 비교하여 최대값을 초과하면 최대값을 업데이트합니다.
비교가 끝나면}{max의 내용을 인쇄합니다.
숫자 컨텍스트에서 s는
N/A
0으로 처리되어야 하므로 처음부터 모든 숫자가 음수가 아닌 한 결과에 영향을 미치지 않습니다.
답변3
tr
, 및를 사용하는 sort
bash 스타일 솔루션head
echo $(< file) | tr ' ' '\n' | sort -rn | head -1
echo $(< file)
파일을 읽고 결과를 에코합니다. 하지만 주위에 따옴표를 넣지 않았기 때문에(echo "$(< file)"
와 동일cat file
) 내용은 개행 문자가 제거되고 공백이 압축된 긴 문자열입니다.| tr ' ' '\n'
tr
각 공백 문자를 개행 문자로 바꿔 결과를 전달합니다.| sort -rn
결과를 에 파이프하고sort
모든 행을 역순(-r) 숫자(-n) 순서(가장 큰 숫자부터)로 정렬합니다.| head -1
결과를head
출력의 첫 번째 줄에 파이프합니다.
답변4
다음 메소드 명령을 통해 수행했습니다.
awk '{print $0}' o.txt | sed -r "s/\s+/\n/g"| sed '/^$/d'| sort | uniq| sed -n '/[0-9]/p'| awk 'BEGIN{sum=0;m=" "}($1 >sum){sum=$1}{m=sum}END{print m}'
산출
awk '{print $0}' o.txt | sed -r "s/\s+/\n/g"| sed '/^$/d'| sort | uniq| sed -n '/[0-9]/p'| awk 'BEGIN{sum=0;m=" "}($1 >sum){sum=$1}{m=sum}END{print m}'
산출
1351.8