TL; DR
アイデアは:
awk '{
IP[$1]++;
}
END {
for(var in IP)
print IP[var]
}
}' getline < sockstat | awk '{print $2 "@" $3}' | grep -v '^PROCESS@PID'
->sockstat|からの出力のすべてのブロックのインスタンスの数を数えたい awk'{print $ 2 "@" $ 3}' | grep -v'^ PROCESS @ PID'
これは次のようになります:
ubuntu-geoip-pr@2382
chrome@2453
chrome@2453
chrome@2453
chrome@2453
chrome@2453
chrome@2453
chrome@2453
chrome@2453
rhythmbox@4759
rhythmbox@4759
rhythmbox@4759
最後に、次のように出力を取得します。
1
8
3
これは、前の出力の各項目の出現回数に対応します。
完全な問題:
sockstatコマンドは、ローカルホストのいくつかのネットワーク統計の情報を出力します。最初に、出力の2番目と3番目の列(それぞれPROCESSとPID)から1つのキーをPROCESS@PIDの形式で出力します。次に、その出力から各一意キーの頻度を計算します。これを行う1つの方法は、awk getline構造を使用することですが、これはファイルに対しては機能するようであり、上記のコマンドから直接入力をプルすることはできませんでした。
ソリューションの優雅さが失われるため、一時ファイルは使用したくありません。