korn shell:如何在处理命令时处理命令?

时间:2013-03-29 17:43:52

标签: linux shell ksh


大家好!中 首先是我现在的代码:

for CLSGRPID in `${${`/usr/bin/snmpwalk \
    -v 1 -c $COMM $HOST $OID.11.1.1.1`##*:}%\n} | xargs` ; do

我想先处理

/usr/bin/snmpwalk -v 1 -c $COMM $HOST $OID.11.1.1.1

单独使用返回行

.2.3.1.2.1.5.11.1.1.1.1 = INTEGER: 1
.2.3.1.2.1.5.11.1.1.1.2 = INTEGER: 2
.2.3.1.2.1.5.11.1.1.1.3 = INTEGER: 3

然后对于每个返回行,我想将其剪切为${line##*:},然后从另一侧${line%\n}剪切,然后将所有这些行放到xargs并处理它。 因此请求的输出将是

1 2 3

有可能吗?请告诉我如何做到这一点。

2 个答案:

答案 0 :(得分:1)

net-snmp命令具有许多选项,用于修改其行为和输出。我建议您阅读每个snmpcmdsnmpwalksnmp.conf的手册页。

检查-O中的snmpwalk选项组(见下文)。

-Oqv组合会生成一个只包含数字的列:

$ clsgrpids=$(
    /usr/bin/snmpwalk -Oqv -v 1 -c $COMM $HOST $OID.11.1.1.1
)
$ echo "$clsgrpids"
1
2
3

删除引号以让shell打印一行:

$ echo $clsgrpids
1 2 3

以下是-O选项组中用于控制snmpwalk输出的其余选项:

-O OUTOPTS
        Toggle various defaults controlling output display:
        0:  print leading 0 for single-digit hex characters
        a:  print all strings in ascii format
        b:  do not break OID indexes down
        e:  print enums numerically
        E:  escape quotes in string indices
        f:  print full OIDs on output
        n:  print OIDs numerically
        q:  quick print for easier parsing
        Q:  quick print with equal-signs
        s:  print only last symbolic element of OID
        S:  print MIB module-id plus last element
        t:  print timeticks unparsed as numeric integers
        T:  print human-readable text along with hex strings
        u:  print OIDs using UCD-style prefix suppression
        U:  don't print units
        v:  print values only (not OID = value)

验证(实际运行代码)

$ snmpwalk  -Ov -v1 -c public localhost  sysUptime
Timeticks: (66595) 0:11:05.95
$ snmpwalk  -Oqv -v1 -c public localhost  sysUptime
0:0:11:35.13
$ snmpwalk  -Otqv -v1 -c public localhost  sysUptime
70012

答案 1 :(得分:0)

您可以使用awk。

for CLSGRPID in `/usr/bin/snmpwalk -v 1 -c $COMM $HOST $OID.11.1.1.1 | awk '{print $NF}'`; do
    echo $CLSGRPID
done