
私は与えられた入力ファイルを読み、「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
を使用します。基本動作もしそのような条件が真ならば。