1열의 범위에서 최대값을 구하고 2열을 출력합니다.

1열의 범위에서 최대값을 구하고 2열을 출력합니다.

대표적인 데이터 세트가 있습니다.

 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>line1max2/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 사이라고 하면 숫자 자체도 포함되는 건가요? 나는 그들이 제안된 솔루션에 있다고 가정합니다(그래서 >=연산자). 나는 next2개 이상의 필드가 있는 행을 무시하는 습관을 갖고 있습니다. 나는 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

관련 정보