traceroute によって返されたデータをフィルタリングする方法について、助けが必要です。
このコマンドによって返される IP をチェックするbash スクリプトを実行しています。
IP=`traceroute -m 2 www.test.com | awk -vOFS='\t' '{if (NR==3){print $2}}'`
echo "$IP: `date`"
「$IP」の値に基づいて、「expect」コマンドを実行して、スイッチ内のパラメーターを変更します。
bash スクリプトは、ルート crontab を介してスケジュールされます。
問題の説明 そのbashスクリプトを実行しているcrontabは、このようなログを生成しています
192.168.3.25: vie dic 14 14:10:23 CET 2012
192.168.3.25: vie dic 14 14:20:12 CET 2012
192.168.3.25: vie dic 14 14:30:11 CET 2012
192.168.3.25: vie dic 14 14:40:11 CET 2012
192.168.3.25: vie dic 14 14:50:11 CET 2012
expect /root/Scripts/delete.exp
192.168.3.111: vie dic 14 15:00:11 CET 2012
*: vie dic 14 15:10:11 CET 2012
*: vie dic 14 15:20:16 CET 2012
お気づきのように、expect スクリプトを実行すると問題が発生し、traceroute ラインは正しい IP (192.168.3.25) の代わりに「*」を返し始めます。なんらかの理由で、スイッチで変更を行った後、約 20 分間、traceroute が 1 行少なく返されると思います (スイッチの IP を示す最初の行が欠落しています)。
traceroute から返される値をいくつかの方法でテストしましたが、awk を使用して traceroute から返された値をフィルタリングすることは避けるべきだと思います。これは、私が知る限り、awk を使用することで、「NR」を使用して行をフィルタリングできるためです。そのため、特定の値 (つまり、1 つの特定の IP) を検索するためにこれらの値をフィルタリングする方法がわかりません。
ご協力ありがとうございました。