Bash如何替换多行变量并打印两个变量

时间:2014-09-23 05:23:08

标签: bash awk sed printf snmp

我正在做snmp设备来查看接口的状态。我试图用它来自的设备替换接口名称,所以我可以在接口名称旁边的列中设置设备名称。

预期输出

DeviceName1 Device1InterfaceName1
DeviceName1 Device1InterfaceName2
DeviceName1 Device1InterfaceName3
DeviceName1 Device1InterfaceName4
DeviceName1 Device1InterfaceName5
DeviceName1 Device1InterfaceName6
DeviceName2 Device2InterfaceName1
DeviceName2 Device2InterfaceName2
DeviceName2 Device2InterfaceName3
DeviceName2 Device2InterfaceName4
DeviceName3 Device3InterfaceName1
DeviceName3 Device3InterfaceName2

我可以运行此脚本来获取接口名称:

#!/bin/bash
while read device
do

var5=$(sm_snmp -c "communitystring" -d $device walk .1.3.6.1.2.1.2.2.1.2 | grep -v "SNMP Walk MIB starting at" | awk -F "= " '{print $2}');

printf "%-20s\n" "$var5"

done < devicelist.txt

上面脚本的输出为我提供了InterfaceNames:

Device1InterfaceName1
Device1InterfaceName2
Device1InterfaceName3
Device1InterfaceName4
Device1InterfaceName5
Device2InterfaceName1
Device2InterfaceName2
Device2InterfaceName3
Device3InterfaceName1
Device3InterfaceName2

我想在当时输出DeviceName和DeviceInterfaceName。我替换的问题是上面脚本的输出将在每一行(我想要)上返回一个DeviceInterfaceName,但我尝试过的任何替换只用一行代替DeviceName替换整个变量。此外,我需要为devicelist.txt中的每个设备执行此操作。

1 个答案:

答案 0 :(得分:0)

printf "%-20s %-20s\n" "${device}" "${var5}"

不是你所期望的?