-1

の内容expect_out(buffer)

GigabitEthernet1/0/9   unassigned      YES unset  up                    up
GigabitEthernet1/0/10  unassigned      YES unset  down                  down
GigabitEthernet1/0/11  unassigned      YES unset  down                  down
GigabitEthernet1/0/23  unassigned      YES unset  down                  down
GigabitEthernet1/0/24  unassigned      YES unset  down                  down
GigabitEthernet1/1/1   unassigned      YES unset  down                  down
GigabitEthernet1/1/2   unassigned      YES unset  down                  down
GigabitEthernet1/1/3   unassigned      YES unset  down                  down
GigabitEthernet1/1/4   unassigned      YES unset  down                  down
Te1/1/1                unassigned      YES unset  down                  down
Te1/1/2                unassigned      YES unset  down                  down
FastEthernet2/0/1      unassigned      YES unset  down                  down
FastEthernet2/0/2      unassigned      YES unset  down                  down
FastEthernet2/0/24     unassigned      YES unset  down                  down
GigabitEthernet2/0/1   unassigned      YES unset  up                    up
GigabitEthernet2/0/2   unassigned      YES unset  down                  down

上記のデータがあります。次のような情報を取得できるように、各タイプのデータ数をカウントする必要があります。

GigabitEthernet1 : 20
GigabitEthernet2 : 20
Tel             : 2
FastEthernet2    : 4
FastEthernet1    : 4

合計:50

どうすればいいですか?私はexpect/tclに関する限り初心者なので、どちらの方向に進むべきかわからないので、助けていただければ幸いです。

分割関数を使用して改行を区切り文字として使用して解析しようとしました。これにより、forループ内で正規表現を使用できるようになりましたが、$ expected_output(buffer)は変数であるため、行が含まれていない可能性があります。

さらに、awkまたはsedをexpect内で使用できますか?そうすれば、それほど難しくはないと思います。しかし、期待される解決策は標準です。

4

2 に答える 2

2

現在の入力データに基づいて、このワンライナー:

 awk -F'/' '{a[$1]++}END{for(x in a){print x" : "a[x];t+=a[x];}print "total : "t}' file

与えます:

FastEthernet2 : 3
GigabitEthernet1 : 9
GigabitEthernet2 : 2
Te1 : 2
total : 16
于 2013-03-07T15:56:46.940 に答える