列から最大値を取得し、その値の20%以上を含むすべての行を抽出します。

列から最大値を取得し、その値の20%以上を含むすべての行を抽出します。

B列の最大値を見つけたいです。そして列列の値が最大値の20%以上のすべての行を保持します。

入力データ

A B C D E
2 79 56 SD L
1 09 67 JK S
9 60 37 KD G
0 10 47 SO E

希望の出力

A B C D E
2 79 56 SD L
9 60 37 KD G

を試しましたが、awk 'BEGIN {max = 0} {if ($2>max) max=$2} END {if ($2 >= (0.1*max)) print}' file_in > file_outファイルの最後の行だけが印刷されます。

ベストアンサー1

END{ }ファイルを2回スキャンするには、すべての行を配列に保存する必要があります。したがって、すべての値と行を保存します。

awk 'NR == 1 {header=$0; next}            # save the header            
  { lines[NR]  = $0; values[NR] = $2;     # save the line and 2nd field
    if ($2 > max) max = $2; }             # update max

  END { print header;                     # in the end, print the header
        for (i = 1 ; i <= NR ; i++)  {    # (we skipped line 0)
          if (values[i] >= max * 0.2)     # print lines where $2 was high enough
            print lines[i]; } } ' file_in 

おすすめ記事