BASHを使用してすべての株式の最高値を出力する方法

BASHを使用してすべての株式の最高値を出力する方法

データセットは次のとおりです。

name score
a 10 
b 20 
c 5 
d 15 
e 20

目標は、最高のスコアを持つすべての名前を出力することです。共通の最大スコアを持つ名前が複数ある場合は、すべての名前を出力します。可能であれば、grep、sort、cut、headのみを使用してください。

現在は合計tail -n +2 sources.txt | sort -k 2,2nr | cut -d ' ' -f 1 | head -1ではなく最大のものだけを出力します。be

希望の出力は

b
e

答え1

$ awk 'FNR == 1   { next };
       FNR == NR  { if ($2 > max) { max = $2 } ; next };
       $2  == max { print $1 }' sources.txt sources.txt
b
e

このawkは1行で入力ファイルを読み取ります(sources.txt)。二重(それでコマンドラインで2回指定する必要があります。)最初は2番目のフィールド($ 2)の最大値を見つけて変数に保存し、2番目はmax$ 2が等しい場合は最初のフィールド($ 1)を印刷しますmax

2つの組み込みawk変数を使用します。 FNR常に現在のファイルの行番号と同じで、NRすべての入力の現在の行番号(累積合計)と常に同じです。したがって、この場合はFNR == NR最初のファイルを読み取り、裏側FNR != NRです。いいえ最初のファイルを読みます。空のファイルはまったく計算されないため、入力ファイルのいずれかが空の場合、正しく機能しません。空のファイルには行がないため、計算する項目はありません。

両方とも入力の最初の行(ヘッダー行)を無視しますFNR == 1 { next }

関連情報