awk - 上位3つに基づいてグループ化

awk - 上位3つに基づいてグループ化

データは次の形式です。

South,London,5
South,Greenwich,7
South,Guildford,2
South,Maidstone,3
South,Oxted,4
North,Manchester,10
North,Leeds,7
North,Grimsby,9
North,Halifax,11
Midlands,Birmingham,16
Midlands,Coventry,10
Midlands,Walsall,15
Midlands,Rutland,1

2番目の列に基づいてグループ化するためにレコードをフィルタリングしてエクスポートするには、AWKプログラムが必要ですが、最初の3つの値のみを印刷します。

South,Greenwich,7
South,London,5
South,Oxted,4
North,Halifax,11
North,Manchester,10
North,Grimsby,9
Midlands,Birmingham,16
Midlands,Walsall,15
Midlands,Coventry,10

実際のファイルにはより多くの地域/都市があります。助けが必要ですか?

答え1

まずsort、コマンドを使用して並べ替え、次を使用してawk各カテゴリの上位3つをフィルタリングできます$1

sort -t, -k1,1 -k3,3nr file | awk -F, 'n[$1]++<3'

出力:

Midlands,Birmingham,16
Midlands,Walsall,15
Midlands,Coventry,10
North,Halifax,11
North,Manchester,10
North,Grimsby,9
South,Greenwich,7
South,London,5
South,Oxted,4

関連情報