複数のコマンドを実行し、すべての出力を集計してログファイルに挿入するスクリプトがあります。実行されるコマンドの1つは「netstat -anp」です。このファイルを検索して、特定のIPに対するすべてのコマンドの実行とフィルタを見つけることができます。 sedまたはawkを使用してこれを達成できますか?では、命令はどんな姿なのでしょうか?
答え1
ファイルからデータをフィルタリングするには、grepを使用するのが最善です。たとえば、
grep <search string> <filename>
awkを使用すると、次のようなものを使用できます。
awk '/string/ {command}' <filename>
利用可能なIPを計算するには
uniq -c <filename>
これにより、カウントとともにユニークなIPを提供します
答え2
「wrapped」は、すべての改行文字が削除され、したがって、各コマンドの出力が1行に「wrapped」されることを意味すると思います。もしそうなら、grep ... | awk ...
あなたはそれを実行しますが、両方のコマンドは必要ありません(「1つで十分なときに2つを使用しないでください」と一般的には良い考えです)。また、コマンドラインにはいくつかの問題があります(たとえば、入力がありませんが、grep
ファイル名が与えられた場合は機能しないため、オプションがあるときに使用する理由がないことをawk
意味します)。grep
wc
grep
-c
ipaddr=192.168.0.1
grep -c "netstat -anp.*$ipaddr" logfile
編集する:
最近のコメントによると、特定の時間間隔でIPアドレスが表示される回数を計算したいとします。コマンドはnetstat
時間間隔内で複数回実行され、すべて1行にあるため、単純なコマンドではuniq -c
十分ではありません。実際、Perlを使用せずに私の心に最初に浮かぶのは次のとおりです。
ipaddr=192.168.0.1
grep "netstat -anp.*$ipaddr" logfile |
tr -cs '0-9.' '\012' |
grep -c "$ipaddr"
POSIXまたはBSDスタイルのコマンドであるとしますtr
。また、grep
探しているIPアドレス(出力に一般的ですnetstat
)に加えて、他の多くのIPアドレスがある可能性があるため、2番目のIPアドレスが必要です。