エラー:整数式が必要です - 比較表

エラー:整数式が必要です - 比較表

同様の命名スタイルを使用してテーブルを比較し、4番目の列(スペース区切り文字を使用)の最初の行で最も高い値を持つファイルを別のディレクトリ(4番目の値)列​​にコピーできる小さな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

おすすめ記事