1列の最大値をすべて出力しようとしています。
だから入力は次のようになります
John. Marketing. 5000.
Marcus. Manager. 9500.
Jason. SW 9500.
Cindy. Developer. 6000.
私が望む出力は
name: Marcus, sal: 9500.
name: Jason, sal: 9500
これまで私のコードは
BEGIN {a=0}
{
if ($3> a)
max=$3;
output=$1
}
END{
print "name: ", output, "sal:", max
}
答え1
ファイルを2回解析する必要があります。まず、最大値を見つけてからその行を印刷する必要があります。たとえば(max
正数であると仮定):
解析.awk
NR == FNR && $3 > max { max = $3 }
NR != FNR && $3 == max
次のように実行します。
awk -f paste.awk infile{,}
{ print "name:", $1, "sal:", $3 }
フォーマットを変更するには、最後の行に追加してくださいparse.awk
。出力は次のとおりです。
name: Marcus. sal: 9500.
name: Jason. sal: 9500.
答え2
awkスクリプトを使用すると、次のことができます。
tst.awk
!max || $3 > max {max=$3; delete array}
$3 == max {array[$0]="name:" OFS $1 OFS "sal:" OFS $3}
END{
for(key in array){
print array[key]
}
}
それだけです:
- 存在しないか、設定された値
max
より小さい場合は、$3
配列を削除します。max
$3
array
- 同じ場合は、出力を配列に保存します
$3
。max
END
スクリプトの最後にarray
印刷された各キーについて
値のリストがmax
大きすぎない場合は、このスクリプトを使用できます。そうでなければ@torの答えより良い解決策かもしれません。