首页 > 解决方案 > 如何精确返回bash脚本的输出值有命令

问题描述

我有以下命令:

$ snmpnetstat -v2c -c public -Cs -Cp udp 10.10.0.32 

具有终端输出:

udp:
           198 total datagrams received
            65 datagrams to invalid port
             0 datagrams dropped due to errors
           265 output datagram requests

我想编写一个返回以下内容的 bash 脚本:

bash 脚本的所需输出:

Received Datagrams: 198 
Invalid port:65 
Dropped datagrams: 0 
Datagram requests: 256

我开始:

#!/bin/bash
    rs="$(snmpnetstat -v2c -c public -Cs -Cp udp 10.10.0.32)"
ReceivedDatagrams=$(echo $rs | cut -d"/" -f1)
InvalidPort=$(echo $rs | cut -d"/" -f2)
DroppedDatagrams=$(echo $rs | cut -d"/" -f3)
DatagramRequests=$(echo $rs | cut -d"/" -f4)

echo "Received Datagrams:$ReceivedDatagrams Invalid port:$InvalidPort Dropped datagrams:$DroppedDatagrams Datagram requests:$DatagramRequests"

输出是:

    zsz@bme-ib112-05:~/bash_scripts$ ./script.sh         
Received Datagrams:udp: 242 total datagrams received 37 datagrams to invalid port 0 datagrams dropped due to errors 638 output datagram requests Invalid port:udp: 242 total datagrams received 37 datagrams to invalid port 0 datagrams dropped due to errors 638 output datagram requests Dropped datagrams:udp: 242 total datagrams received 37 datagrams to invalid port 0 datagrams dropped due to errors 638 output datagram requests Datagram requests:udp: 242 total datagrams received 37 datagrams to invalid port 0 datagrams dropped due to errors 638 output datagram requests

输出值一遍又一遍地重复,而不是我想要的。

标签: pythonbashshellubuntuubuntu-18.04

解决方案


awk正如 shellter 所指出的,一个简单的解决方案消除了所有这些额外进程的开销:

$ cat udp.out
udp:
           198 total datagrams received
            65 datagrams to invalid port
             0 datagrams dropped due to errors
           265 output datagram requests

$ awk '
/received/ {printf "Received Datagrams: %s\n", $1}
/invalid/  {printf "Invalid port: %s\n"      , $1}
/dropped/  {printf "Dropped datagrams: %s\n" , $1}
/requests/ {printf "Datagram requests: %s\n" , $1}
' udp.out

Received Datagrams: 198
Invalid port: 65
Dropped datagrams: 0
Datagram requests: 265

推荐阅读