将输出表格转换为JSON

3
我需要将默认的 Accel-PPP 输出格式化为 JSON,但我不是有经验的程序员,并希望有一个高效的命令以节省处理时间。我找到了这个链接 https://unix.stackexchange.com/questions/243484/how-do-i-convert-the-output-of-ps1-to-json。但默认输出与上述链接不同,如下所示:
  ifname  | username |    calling-sid    | rate-limit  
----------+----------+-------------------+-------------
 pppoe0   | joao     | EC:22:80:A2:5E:D5 | 10240/1024  
 pppoe2   | pedro    | C0:4A:00:88:E5:29 | 5120/1024   
 pppoe4   | maria    | B0:4E:26:B1:75:7D | 5120/1024 

我希望您能将其呈现为这样:

  [  
   {  
      "username":"joao",
      "data":{  
         "ifname":"pppoe0",
         "calling-sid":"EC:22:80:A2:5E:D5",
         "rate-limit":"10240/1024"
      }
   },
   {  
      "username":"pedro",
      "data":{  
         "ifname":"pppoe2",
         "calling-sid":"C0:4A:00:88:E5:29",
         "rate-limit":"5120/1024"
      }
   },
   {  
      "username":"maria",
      "data":{  
         "ifname":"pppoe4",
         "calling-sid":"B0:4E:26:B1:75:7D",
         "rate-limit":"5120/1024"
      }
   }
]

这只是读取数据并以不同的(JSON)格式重新编写它的问题。您喜欢哪种语言? - Bruce Becker
我非常喜欢AWK,但我不会用它,如果你能帮我,我将不胜感激。 - andlui9
你可能会在这里使用AWK时遇到困难,因为它包含许多特殊字符。如果对你来说有意义的话,使用像Python这样的语言会更容易一些。 - Bruce Becker
我自己也遇到过这个问题,但可能是同样的Python,或者是Perl。 - andlui9
1个回答

0
我写了一个小的shell脚本以JSON格式打印它:
#!/bin/bash

# Script to convert output of accel-cmd to JSON format
# Author: lfelipe
# Since: 2019-02-12

# Return of accel-cmd
ACCEL_RETURN=$(accel-cmd show sessions username,ifname,calling-sid,rate-limit,state | grep -v 'calling-sid' | grep -v '+-----' | sed 's/ //g')

# To save JSON format in string
JSON="["

# Delimiter of for
OLD_IFS=$IFS
IFS=$'\n'

# For each result
for USER in $ACCEL_RETURN
do
        USERNAME=`echo  ${USER} | cut -d '|' -f 1`
        IFNAME=`echo    ${USER} | cut -d '|' -f 2`
        SID=`echo       ${USER} | cut -d '|' -f 3`
        RATE=`echo      ${USER} | cut -d '|' -f 4`

        JSON+='{'

        JSON+='"username":"'${USERNAME}'",'

        JSON+='"data":{'
        JSON+='"ifname":"'${IFNAME}'",'
        JSON+='"calling-sid":"'${SID}'",'
        JSON+='"rate-limit":"'${RATE}'"'
        JSON+='}'
        JSON+='},'

done

# Default delimiter
IFS=$OLD_IFS

JSON+="]"

#Remove the last comma
JSON=`echo ${JSON%,*} ${JSON##*,}`

# Print JSON in string
echo "$JSON"

exit

在CentOS 6.9中测试,并在jsonlint中验证JSON


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接