awkで変数でパターンを使用する方法

awkで変数でパターンを使用する方法

私のファイルは次のとおりです。パーセントが80を超える学生の記録を表示したいです。

Studid    StudName     Asp.Net   DBMS     Unix
   1       Ani         75        62       80
   2       George      90        95       82
   3       Jake        45        30       40
   4       Dennie      89        92       90

だから私は次のコードを使用しました。

awk '(($3+$4+$5)/3)>80 {print}' stud

うまくいきますが、この列を変数に割り当ててから出力を表示したいと思います。だから私は以下のコードを試してみましたが、うまくいきません。

awk 'total=$3+$4+$5, per=total/3, per>80 {print}' stud

可変的なソリューションがありますか?

ベストアンサー1

以下でロジックを変更できます。ルール提出行動

awk '{total=$3+$4+$5; per=total/3; if (per>80) print}' stud
   2       George      90        95       82
   4       Dennie      89        92       90

これは算術的に列ヘッダを計算しようとすることに注意してください。では、awk数値以外のフィールドに対して算術を試みるとゼロとして扱われるため、「動作します」。ただし、たとえば変更すると、ヘッダー行が印刷されます。 .IMHOのテストより良いアプローチは、ルールの操作を使用してヘッダー行を明示的にスキップするper<80ことです。nextNR==1

awk 'NR==1 {next} {total=$3+$4+$5; per=total/3; if (per>80) print}' stud
   2       George      90        95       82
   4       Dennie      89        92       90

またはタイトルが必要な場合は明示的に印刷してください。

awk 'NR==1 {print; next} {total=$3+$4+$5; per=total/3; if (per>80) print}' stud
Studid    StudName     Asp.Net   DBMS     Unix
   2       George      90        95       82
   4       Dennie      89        92       90

おすすめ記事