2つの列の平均が特定の数より大きい行を抽出するawkスクリプト

2つの列の平均が特定の数より大きい行を抽出するawkスクリプト

私は与えられた入力ファイルを読み、「2コーススコア」の平均が90点を超える学生の記録を表示する論理/コマンドを作成しています。

.txt ファイルの入力 -

Deepu#First#Meridian#95#90
Neethu#Second#Meridian#80#75
Sethu#First#DAV#75#70
Theekshana#Second#DAV#80#79
Teju#First#Sangamithra#88#63
Theekshitha#Second#Sangamithra#91#90

出力:

Deepu|First|Meridian|95|90|92.5

私は次のコマンドを書いた -

 $ awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }} input.txt .

エラーが表示されますF# not found

ベストアンサー1

コマンドにタイプミスがあります。

awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }} input.txt

コードの末尾に一重引用符がありませんawk。次のように見えます。

awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }}' input.txt

あるいは、次のようにawkコードを書くこともできます。

awk -F '#' -v OFS='|' '($4+$5)/2 > 90 { $(NF+1) = ($4+$5)/2; print }' input.txt

OFSこれは、区切り文字として出力フィールドを自動的に渡し、出力|前に現在のレコードの最後に平均を新しいフィールドとして追加するために使用されます(割り当ては$(NF+1)新しいフィールドを追加します。NF現在のレコードのフィールド数であり、$NF最後のフィールドです)。フィールド)。これにより、出力したいすべてのフィールドに言及する必要がなくなります。

別のawk解決策:

awk -F '#' -v OFS='|' '($(NF+1) = ($4+$5)/2) > 90' input.txt

これにより、新しい最後のフィールドが4番目と5番目のフィールドの平均に設定され、新しいフィールドが90より大きい場合にレコードが印刷されます。これにより、平均を2回計算するのを防ぎ、次printを使用します。基本動作もしそのような条件が真ならば。

おすすめ記事