0

私は実際にこれが必要とされた例はありませんでしたが、ここにいます...

私が(残念ながら)得たのは、netstat -nr(ほぼ6000の個別の静的ルート)の出力です。

そのファイルを取得し、これが機能するようになったら、最終的に各行を新しい「iprouteadd」コマンドに変換する必要があります。

これが私のフェイルコードです(下部のechosはテスト用です->これが機能したらiproute addの代わりに使用したいと思います):

num=`cat $logfile | wc -l`
echo $num
echo " "
for ((i=0; i<=$num; i++))
do

dst=$(awk '{print$1}' $logfile)
gw=$(awk '{print$2}' $logfile)
mask=$(awk '{print$3}' $logfile)
echo $dst
echo $gw
echo $mask
echo " "
done

出力は、次のようにはなりません。宛先ゲートウェイネットマスクは次のようになります。

デスティネーションデスティネーションデスティネーションデスティネーション

ゲートウェイゲートウェイゲートウェイゲートウェイ

ネットマスクネットマスクネットマスクネットマスク

実行するたびに、各出力がコマンドにフィードできる単一のDST / GW /ネットマスクになるようにするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

3

あなたのループは裏返しです。awkコマンドは毎回ファイル全体を処理し、完了します。

変数の値が必要な場合は、ほとんどすべてのスクリプトを次のように置き換えます。

#!/bin/bash
while read -r dst gw mask _
do
    echo "$dst $gw $mask"    # substitute your command here
done < "$logfile"
于 2012-06-28T01:34:43.307 に答える
1

答えはAWKにあります:

awk '{print "echo",$1,$2,$3}' $logfile | sh -x

次に、echoを実行する必要のあるコマンドに置き換えます

于 2012-06-28T01:29:44.953 に答える