이 출력의 값을 구문 분석하는 가장 적절한 방법은 무엇입니까?

이 출력의 값을 구문 분석하는 가장 적절한 방법은 무엇입니까?

스크립팅 중이고 구문 분석하려는 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내장 셸을 사용합니다 .gitsedperl

관련 정보