![1열의 범위에서 최대값을 구하고 2열을 출력합니다.](https://linux55.com/image/172016/1%EC%97%B4%EC%9D%98%20%EB%B2%94%EC%9C%84%EC%97%90%EC%84%9C%20%EC%B5%9C%EB%8C%80%EA%B0%92%EC%9D%84%20%EA%B5%AC%ED%95%98%EA%B3%A0%202%EC%97%B4%EC%9D%84%20%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
대표적인 데이터 세트가 있습니다.
35.5259 327
35.526 326
35.526 325
35.5261 324
35.5262 323
35.5263 322
35.5264 321
35.5265 320
35.5266 319
35.5268 318
# Contour 4, label:
35.5269 317
35.527 316
35.5272 315
35.5274 314
35.5276 313
35.5278 312
35.528 311
# Contour 4, label:
35.5282 310
35.5285 309
35.5287 308
35.529 307
35.5293 306
다음을 사용하여 2열 범위에서 두 개의 최대값을 찾으려고 합니다.
awk '320>$2,$2>315 && $1>max1{max1=$1;line=$2} 313>$2,$2>307 && $1>max2{max2=$1;line2=$2} END {printf " %s\t %s\t %s\t %s\n",max1,line,max2,line2}' FILENAME
(txt 파일에 공백이 많기 때문에) 빈 출력이 표시됩니다. 어떻게 무시할 수 있나요? $1+0 == $1?
col1에서는 320~315 사이, col2에서는 313~307 사이의 최대값을 찾고 싶습니다. 필요한 출력은 다음과 같습니다.
35.5266 319 35.5278 312
원하는 출력을 어떻게 얻을 수 있습니까? 감사해요
답변1
,
로 변경하면 &&
.
하지만 나는 당신에게도 논리적 오류가 있다고 생각합니다. 와 같아야 $1>max1
하지 않나요 ?$2>line1
max2/line2
awk '
320>$2 && $2>315 && $2>line1 {max1=$1;line1=$2}
313>$2 && $2>307 && $2>line2 {max2=$1;line2=$2}
END {printf " %s\t %s\t %s\t %s\n",max1,line1,max2,line2}
' file
답변2
pLumo의 답변은 샘플 출력을 제공하지만 귀하의 질문은 최대 값을 찾는 것입니다.열 1 내;예제 출력은 최대값을 인쇄합니다.2열에. 그래서 나는 당신이 당신의 질문이나 예제 결과를 잘못 언급했다고 생각합니다. 그리고 320~315 사이라고 하면 숫자 자체도 포함되는 건가요? 나는 그들이 제안된 솔루션에 있다고 가정합니다(그래서 >=
연산자). 나는 next
2개 이상의 필드가 있는 행을 무시하는 습관을 갖고 있습니다. 나는 BEGIN
내가 선택한 변수를 초기화하는 데 있어 좋은 습관을 따릅니다.
awk 'BEGIN {max1=max2=line1=line2=0}
NF!=2 {next}
320>=$2 && $2>=315 && $1>max1 {max1=$1;line1=$2}
313>=$2 && $2>=307 && $1>max2 {max2=$1;line2=$2}
END {printf " %s\t %s\t %s\t %s\n",max1,line1,max2,line2}' file.name.here