スクリプト中で、解析したいnetstat出力があります。以下の出力の値を解析する最も効率的な方法は何ですか?私は以前のシェルを使用していることを指摘する必要があります/bin/sh
。bash
次のコマンドでこの出力を生成します。netstat -d -K O30S1O1
MVS TCP/IP NETSTAT CS V1R11 TCPIP Name: NCDTCP 10:12:39
DevName: OSAQO130 DevType: MPCIPA
DevStatus: Ready CfgRouter: Non ActRouter: Non
LnkName: O30S1O1 LnkType: IPAQENET LnkStatus: Ready
Speed: 0000001000
IpBroadcastCapability: No
ArpOffload: Yes ArpOffloadInfo: Yes
ActMtu: 8992
VLANid: None VLANpriority: Disabled
ReadStorage: GLOBAL (4096K) InbPerf: Balanced
ChecksumOffload: Yes SegmentationOffload: Yes
SecClass: 255 MonSysplex: No
Routing Parameters:
MTU Size: 1500 Metric: 10
DestAddr: 0.0.0.0 SubnetMask: 255.255.255.192
Multicast Specific:
Multicast Capability: Yes
Group RefCnt SrcFltMd
----- ------ --------
224.0.0.5 0000000001 Exclude
SrcAddr: None
224.0.0.1 0000000001 Exclude
SrcAddr: None
Link Statistics:
BytesIn = 13545386
Inbound Packets = 129630
Inbound Packets In Error = 0
Inbound Packets Discarded = 0
Inbound Packets With No Protocol = 0
BytesOut = 81424019
Outbound Packets = 520188
Outbound Packets In Error = 0
Outbound Packets Discarded = 0
IPv4 LAN Group Summary
LanGroup: 00006
Name Status ArpOwner VipaOwner
---- ------ -------- ---------
O30S1O1 Active O30S1O1 Yes
DevName
たとえば、、BytesIn
などの複数の値を取得したいとしますBytesOut
。私は毎分4つのインターフェイスでnetstatコマンドを実行し、出力をExcelにインポートするためにcsvファイルに書き込む予定です。
答え1
解析に何を使用しても、次の形式で出力することをお勧めします。
DevName=OSAQO130
BytesIn=13545386
その後、スクリプトをその中にラップeval $(...)
し、変数$DevName
と$BytesIn
。
分析perl
:
netstat -d -K O30S1O1 | perl -ne '$DevName = $1 if m/DevName: (\S+)/; $BytesIn = $1 if m/BytesIn.*= (\d+)/; END {print map("$_=${$_}\n", qw/DevName BytesIn/)}'
分析sed
:
netstat -d -K O30S1O1 | sed -ne 's/DevName: \([^ ]*\).*/DevName=\1/ p' -e 's/.*BytesIn.*= \([0-9]*\)/BytesIn=\1/ p'
Windowsでは、およびを含む多くのUnixツールが組み込まれているbash
シェルを使用しています。git
sed
perl