複数のファイルを比較し、より大きな値とファイル名を印刷します。

複数のファイルを比較し、より大きな値とファイル名を印刷します。

次の形式のファイルが約2000個あります。

ファイル:WHWH-19975612.txt

0.1   70  30
0.01  70  32
0.9   72  32
...

ファイルB:WHWH-20004526.txt

0.2   70 30
0.001 70 32
1.0   72 32
...

希望の出力

0.2  70 30  WHWH-20004526
0.01 70 32  WHWH-19975612
1.0  72 32  WHWH-20004526
...

これにより、より大きな値が存在するファイルを追跡できるため、追加の処理が必要になる場合があります。

答え1

ファイル数が1回の呼び出しに適している場合は、awk次のことができます。

awk '{ if ($1 > maxvalues[$2" "$3]) { 
         maxvalues[$2" "$3]=$1; 
         maxfiles[$2" "$3]=FILENAME; 
       }
     } 
     END { 
       for (i in maxvalues) printf "%-4s %5s %s\n", maxvalues[i], i, maxfiles[i] 
    }' \
    *

サンプルデータを使用してテストファイルセットを作成した後、以下を実行しました。

for((i=20004527;i<20006526;i++))
do 
  cp WHWH-20004526.txt WHWH-${i}.txt
done

...利用可能な約2000個のデータファイルを生成します。

関連情報