0

我从来没有真正需要这样做的实例,但我在这里......

我(不幸的是)得到的是 netstat -nr 的输出(几乎 6000 个单独的静态路由)。

我需要获取该文件,并在完成此操作后最终将每一行转换为新的“ip route add”命令。

这是我的失败代码(底部的回声用于测试->一旦可行,我想将它们替换为 ip route 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 回答