複数のフィールドから派生したキーのMINおよびMAX値の生成

複数のフィールドから派生したキーのMINおよびMAX値の生成

タブで区切られ、次のような大きなフラットファイルがあります。

APP     SRC     HITS
App1    SRC1    202
App1    SRC1    101
App1    SRC13   90
App1    SRC2    3169
App1    SRC4    1
App1    SRC2    158
App1    SRC2    151
App3    SRC3    1
App3    SRC3    6
App3    SRC3    11
App3    SRC3    16
App3    SRC3    339
App2    SRC3    2
App2    SRC3    10023

私は非常に新しいスクリプト作成者なので、どこから始めるべきかわからず、APP列とSRC列の結果をグループ化する必要がある解決策が見つからないようです(たとえば、APP列とSRC列は1つのキーになります)。

各アプリケーションとそのアプリケーションが属するSRCのMINとMAXのクリック数を印刷したいと思います。例えば

出力は次のとおりです。スクリプトを介してファイルを渡してこれを達成する方法はありますか?

APP  SRC   MIN   MAX 
App1 SRC1  101   202
App1 SRC2  151   3169
App3 SRC3  1     339
App2 SRC3  2     10023

よろしくお願いします!

ベストアンサー1

そしてawk

awk '
BEGIN{ FS=OFS="\t"; print "APP", "SRC", "MIN", "MAX" }

 NR==1{ next }
 { key=($1 OFS $2) }
 !(key in min) { min[key]=max[key]= $3 }
 min[key]>$3 { min[key]=$3 }
 max[key]<$3 { max[key]=$3 }

END{ for (key in min) print key, min[key], max[key] }' infile

出力:

APP     SRC     MIN     MAX
App2    SRC3    2       10023
App1    SRC1    101     202
App1    SRC2    151     3169
App1    SRC4    1       1
App1    SRC13   90      90
App3    SRC3    1       339

おすすめ記事