2012-01-13 16 views
3

私のCプログラムから、特定のアプリケーションリストのアプリケーションとその出力ポートのリストを取得したいと思います。awsでss出力を解析する

私は私に41477 59505のようなリストを与える

ss -natp | awk '/firefox/ { split($4,array,":"); printf "%d ", array[2]} END{print ""}'' 

のようなものを使用したと思っています。

ssを一度呼び出すと、これをすべてのアプリケーションで効率的に取得する方法は何ですか? (複数の出力パイプ?多くのマッチにawkを使用する最適な方法はありますか?ファイルにキャレットを入れて何度も何度もawkするのですか?)

ありがとう!

答えて

3

awkの連想配列機能を使用してください。

ss -natp | awk '{port = split($4, array, ":"); program[$1] = program[$1] " " port; } 
       END { for (p in program) print p ": " program[p]; }' 

未定 - 概念はほぼ正しいです。

+0

私はどのカラムにプログラム名が含まれているのかチェックしていません(私の主なマシンには 'ss'がありません)。私はそれが '$ 1 'だと仮定しましたが、あなたはそれが現れる場所に適応するようにスクリプトを調整することができます。あなたのスクリプトはFirefoxの行のどこにでもマッチします。 –