오류: 정수 표현식이 필요합니다 - 비교표

오류: 정수 표현식이 필요합니다 - 비교표

비슷한 이름 지정 스타일을 사용하여 테이블을 비교하고 네 번째 열(공백 구분 기호 사용)의 첫 번째 행에서 가장 높은 값을 가진 파일을 다른 디렉터리(네 번째 값) 열에 복사할 수 있는 작은 bash 프로그램이 있습니다. 10진수(예: 1111.22).

#! /bin/bash
river=lobith_rhine
highest=1
for model in H08
do
  for gcm in IPSL-CM5A-LR
  do
    for scenario in hist rcp8p5
    do
      for x in ${model}_${gcm}_${scenario}_${river}[1-9]/${model}_${gcm}_${scenario}_${river}[1-9].txt
      do
        fourth="$(awk 'NR==1{print $4}' $x)"
        if [ "$highest" -lt "$fourth" ];then
            highest=$fourth
            hifile=$x
        fi
      done
      echo "highest was $highest in $hifile"
      cp $hifile /home/steve/high_test/${model}_${gcm}_${scenario}_${river}.txt
    done
  done
done

불행하게도 13행 if [ "$highest" -lt "$fourth" ];then에서는 다음과 같은 오류 메시지가 생성됩니다.

integer expression expected

그래서 비교 연산자에 관한 문서를 읽었고 문제가 되는 줄을 다음으로 바꿀 수 있다는 것을 알았습니다.

if [ "$highest" \< "$fourth" ];then

하지만 이는 전체 값이 아닌 ASCII 알파벳 값만 비교하기 때문에 제대로 작동하지 않습니다.

이러한 문제를 해결하는 방법을 아는 사람이 있나요?

답변1

알겠습니다. 해결 방법은 다음과 같습니다.

#! /bin/bash
river=lobith_rhine
highest=1
for model in H08
do
  for gcm in IPSL-CM5A-LR
  do
    for scenario in hist rcp8p5
    do
      RESULT=$(awk 'FNR==1 {print $4, FILENAME}' ${model}_${gcm}_${scenario}_${river}[1-9]/${model}_${gcm}_${scenario}_${river}[1-9].txt | sort -n -r| head -1) 
      highest="$(echo $RESULT | cut -d ' ' -f1 )"
      hifile="$(echo $RESULT | cut -d ' ' -f2 )"
      echo "highest was $highest in $hifile"
      cp "$hifile" "/home/steve/high_test/${model}_${gcm}_${scenario}_${river}.txt"
    done
  done
done

아이디어는명령은 여러 파일을 제어합니다.

 awk 'FNR==1 {print $4, FILENAME}' *txt | sort -n -r| head -1 | cut -d ' ' -f2

어디:

Ps> 정렬이나 헤드 없이 awk만 사용하여 솔루션을 생각해내는 것이 가능합니다.

awk 'FNR==1 {i++; A[i]=$4; B[i]=FILENAME} 
     END{ c=A[1];d=B[1];  
          for (j=2;j<i;j++){
            if (A[j]>c){c=A[j];d=B[j];}  
          } 
          print c,d ;
        }' *txt

답변2

사용 가능한 경우 bc라인 13을 다음으로 바꿀 수 있습니다.

if [ $(echo "$highest<$fourth" | bc) = 1 ];then

관련 정보