首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Bash从SNMPWALK请求获取多个字符串,但不确定如何设置输出格式

通过Bash从SNMPWALK请求获取多个字符串,但不确定如何设置输出格式
EN

Stack Overflow用户
提问于 2015-01-22 21:10:55
回答 1查看 1.6K关注 0票数 0

我还没有太多的巴什经验,我正在学习。在工作中,我们需要使用SNMP从无线接入点中提取数据。我的任务是制作一个脚本来遍历几千个访问点。

我通过SNMPWALK通过顺序请求来拉动多个数据字符串。这就是我如何设置我的输入:

代码语言:javascript
复制
IAP=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapName -Oqv)
MODEL=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::arrayModel -Oqv | cut -d ',' -f1)
CHANNEL=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapChannel -Oqv)
MAXHOUR=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsHour -Oqv)
MAXDAY=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsDay -Oqv)
MAXWEEK=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsWeek -Oqv)
MAXMONTH=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsMonth -Oqv)
MAXYEAR=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsYear -Oqv)
MAC=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMacAddress -Oqv)

下面是通过echo打印的输入示例

代码语言:javascript
复制
iap1
iap2
iap3
iap4
iap5
iap6
iap7
iap8

XR4820

6
100
11
149
64
112
36
161

9
2
7
2
2
1
3
2

11
5
9
4
8
3
3
3

22
9
21
4
12
4
16
5

24
23
21
5
12
8
20
11

24
23
21
5
12
8
20
11

00:0f:7d:ea:b1:00-01
00:0f:7d:ea:b1:10-11
00:0f:7d:ea:b1:20-21
00:0f:7d:ea:b1:30-31
00:0f:7d:ea:b1:40-41
00:0f:7d:ea:b1:50-51
00:0f:7d:ea:b1:60-61
00:0f:7d:ea:b1:70-71

我需要把数据输出到CSV。问题是我得把他们弄得井井有条。模特频道。。.,MODEL1,CHANNEL1 .。.)。我好像做得不好。

我尝试使用IFS,正如堆栈溢出中其他答案所建议的那样。我尝试创建一个for循环,然后迭代元素:

代码语言:javascript
复制
IAP=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapName -Oqv)

if [ "$IAP" != "No Such Instance currently exists at this OID" ]
then

    MODEL=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::arrayModel -Oqv | cut -d ',' -f1)

    CHANNEL=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapChannel -Oqv)
    IFS=' ' read -a CHANNEL <<< "$CHANNEL"

    MAXHOUR=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsHour -Oqv)
    IFS=' ' read -a MAXHOUR <<< "$MAXHOUR"

    MAXDAY=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsDay -Oqv)
    IFS=' ' read -a MAXDAY <<< "$MAXDAY"

    MAXWEEK=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsWeek -Oqv)
    IFS=' ' read -a MAXWEEK <<< "$MAXWEEK"

    MAXMONTH=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsMonth -Oqv)
    IFS=' ' read -a MAXMONTH <<< "$MAXMONTH"

    MAXYEAR=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsYear -Oqv)
    IFS=' ' read -a MAXYEAR <<< "$MAXYEAR"

    MAC=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMacAddress -Oqv)      
    IFS=' ' read -a MAC <<< "$MAC"

    for ((i=0; i<${#IAP[@]}; ++i));
    do
        ia=${IAP[$i]}
        m=${MAC[$i]}
        c=${CHANNEL[$i]}
        h=${MAXHOUR[$i]}
        d=${MAXDAY[$i]}
        w=${MAXWEEK[$i]}
        mon=${MAXMONTH[$i]}
        y=${MAXYEAR[$i]}

        if [ -n "$m" ]
        then

            TEMP="$MODEL,$ia,$c,$h,$d,$w,$mon,$y"
            if [ $i -gt 1 ]
            then
                OUTPUT=",$OUTPUT,$TEMP"
            else
                OUTPUT="$TEMP"
            fi

        fi
    done

但是,这是输出:

代码语言:javascript
复制
XR4820,iap1
iap2
iap3
iap4
iap5
iap6
iap7
iap8,11,8,11,11,11,11

虽然它应该是:

2,6,9,11,22,24,24,2,100,2,5,9,23,23,iap3,

概述:

我的输入是一些长字符串,我需要解析这些字符串并将元素发送到.CSV文件中。他们需要井然有序.从每个元素中获取元素'0‘,然后从元素'1’获取元素等等。我创建了一个循环,它不工作,但仍然打印一些数据。在我天真的观点中,最好的解决方案是将每个变量转换成一个数组,并按顺序遍历元素。

  • 将每个输入变量转换为数组的正确方法是什么?每个变量的输入范围从2到16不等。
  • 请看我的for循环。如何在维护输出格式的同时简化它?这是一个混乱的多个变化
  • 如果我使用IFS获取数据并将其放置到数组中,那么需要更改什么呢?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 21:41:07

您可以通过var=( $var )创建一个变量(空格分隔)数组,但我没有完全理解您的问题。

如果你编辑了你的帖子,并在文章的结尾总结了你想要的东西,那将是有帮助的。

编辑(基于注释):

在字段被‘\n’分隔的情况下:

代码语言:javascript
复制
var1=`echo $var1 | tr "\n" " "`
var1=( $var1 )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28098748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档