스크립팅 중이고 구문 분석하려는 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