Awk不';无法正确表示ip地址

Awk不';无法正确表示ip地址,awk,ip,Awk,Ip,我已经完成了bash脚本,用于对极端交换机端口进行排序: #!/bin/bash file="/bin/visiextreme.txt" while read ip do a=$(snmpwalk -v 2c -c test $ip ifDescr | column -t >> /bin/alias.txt ) b=$(snmpwalk -v 2c -c test $ip ifAlias | awk '{print '$ip' " " $4 }' | column

我已经完成了bash脚本,用于对极端交换机端口进行排序:

#!/bin/bash
file="/bin/visiextreme.txt" 

while read ip
do
    a=$(snmpwalk -v 2c -c test $ip ifDescr | column -t >> /bin/alias.txt )
    b=$(snmpwalk -v 2c -c test $ip ifAlias | awk '{print '$ip' " " $4 }' | column -t >> /bin/descr.txt ) 
done < "$file"

c=$( paste /bin/alias.txt /bin/descr.txt | awk ' /'tr_'/{print $7 " " $6 " " $8}' | column -t >> /bin/aliasdescr.txt )
为什么在命令
|awk'{print'$ip'''$4}'|
之后我会得到输出:

10.10.960.21
10.10.960.22
192.16800.24

有什么建议吗?

将参数从bash传递到awk的首选方法是在命令行上使用
-v
选项提供参数。比如:

awk -vip="$ip" '{print ip" "$4 }'
这会解决你的问题。但是,您仍然可以使用您的方法,
但是我们必须在
print
的参数周围加上双引号

请注意以下内容(摘自您的问题):

扩展到

awk '{print 10.1.96.21 " " $4}'
这显然不是我们想要的。因此,我们需要在
10.1.96.21
周围加上双引号,以便
print
理解我们想要打印的是字符串
10.1.96.21
,而不是数字
10.1
。因此,这是一个解决方案:

awk '{print "'$ip' " $4 }'
如果在
10.1.96.21
周围没有双引号,则awk内的点似乎扩展为零(!)。例如:

awk 'BEGIN {print 1.2.3.4}'
给予


(有谁能解释这种行为吗?

将参数从bash传递到awk的首选方法是在命令行上使用
-v
选项提供参数。比如:

awk -vip="$ip" '{print ip" "$4 }'
这会解决你的问题。但是,您仍然可以使用您的方法,
但是我们必须在
print
的参数周围加上双引号

请注意以下内容(摘自您的问题):

扩展到

awk '{print 10.1.96.21 " " $4}'
这显然不是我们想要的。因此,我们需要在
10.1.96.21
周围加上双引号,以便
print
理解我们想要打印的是字符串
10.1.96.21
,而不是数字
10.1
。因此,这是一个解决方案:

awk '{print "'$ip' " $4 }'
如果在
10.1.96.21
周围没有双引号,则awk内的点似乎扩展为零(!)。例如:

awk 'BEGIN {print 1.2.3.4}'
给予


(有谁能解释这种行为吗?

将参数从bash传递到awk的首选方法是在命令行上使用
-v
选项提供参数。比如:

awk -vip="$ip" '{print ip" "$4 }'
这会解决你的问题。但是,您仍然可以使用您的方法,
但是我们必须在
print
的参数周围加上双引号

请注意以下内容(摘自您的问题):

扩展到

awk '{print 10.1.96.21 " " $4}'
这显然不是我们想要的。因此,我们需要在
10.1.96.21
周围加上双引号,以便
print
理解我们想要打印的是字符串
10.1.96.21
,而不是数字
10.1
。因此,这是一个解决方案:

awk '{print "'$ip' " $4 }'
如果在
10.1.96.21
周围没有双引号,则awk内的点似乎扩展为零(!)。例如:

awk 'BEGIN {print 1.2.3.4}'
给予


(有谁能解释这种行为吗?

将参数从bash传递到awk的首选方法是在命令行上使用
-v
选项提供参数。比如:

awk -vip="$ip" '{print ip" "$4 }'
这会解决你的问题。但是,您仍然可以使用您的方法,
但是我们必须在
print
的参数周围加上双引号

请注意以下内容(摘自您的问题):

扩展到

awk '{print 10.1.96.21 " " $4}'
这显然不是我们想要的。因此,我们需要在
10.1.96.21
周围加上双引号,以便
print
理解我们想要打印的是字符串
10.1.96.21
,而不是数字
10.1
。因此,这是一个解决方案:

awk '{print "'$ip' " $4 }'
如果在
10.1.96.21
周围没有双引号,则awk内的点似乎扩展为零(!)。例如:

awk 'BEGIN {print 1.2.3.4}'
给予


(有谁能解释这种行为吗?

请注意,
doneTry
awk-vip=“$ip”{print ip”“$4}'
中的文件名前面有一个斜杠
/
,您似乎对shell脚本非常困惑-将临时文件存储在/bin中,无故跳入/跳出awk(
awk'/'tr_'/
),多次无明显原因地调用列,无明显原因地取消引用变量,在脚本末尾的变量
c
中不存储任何内容,等等。如果您希望帮助编写脚本来完成您想要的任务,发布另一个带有示例输入和预期输出的问题,并告诉我们
snmpwalk
输出的内容。感谢所有人的帮助。在哈肯的回答之后,脚本做了我想要的。Ed,放松点,我脚本中的每件事都有原因,脚本做了我想做的事。请注意,
doneTry
awk-vip=“$ip”{print ip”“$4}”
中的文件名前面有一个斜线
/
,您似乎对shell脚本非常困惑-将临时文件存储在/bin中,无缘无故地跳入/跳出awk(
awk'/'tr_'/
),多次无明显原因地调用列,无明显原因地取消引用变量,在脚本末尾的变量
c
中不存储任何内容,等等。如果您希望帮助编写脚本来完成您想要的任务,发布另一个带有示例输入和预期输出的问题,并告诉我们
snmpwalk
输出的内容。感谢所有人的帮助。在哈肯的回答之后,脚本做了我想要的。Ed,放松点,我脚本中的每件事都有原因,脚本做了我想做的事。请注意,
doneTry
awk-vip=“$ip”{print ip”“$4}”
中的文件名前面有一个斜线
/
,您似乎对shell脚本非常困惑-将临时文件存储在/bin中,无缘无故地跳入/跳出awk(
awk'/'tr_'/
),多次无明显原因地调用列,无明显原因地取消引用变量,在脚本末尾的变量
c
中不存储任何内容,等等。如果您希望帮助编写脚本来完成您想要的任务,发布另一个带有示例输入和预期输出的问题,并告诉我们
snmpwalk
输出的内容。感谢所有人的帮助。在哈肯的回答之后,脚本做了我想要的。Ed,放松点,我脚本中的每件事都有原因,脚本做了我想做的事情。请注意,
doneTry
awk-vip=“$ip”{print ip”“$4}”中的文件名前面有一个斜杠
/