需要在shell输出中从数组末尾删除逗号

时间:2019-09-06 10:34:45

标签: json bash shell

(我已经创建了bash脚本,该脚本将通过执行SSH从多个Linux服务器中提取服务器信息。能够从所有服务器获取json输出(从服务器变量中获取),但是需要在数组末尾删除逗号最后一台服务器。

我已经创建了变量并在下面提供了打印命令

printf '{"hostname":"%s","UPTIME":"%s","memtotal":"%s","memUsed":"%s","swaptotal":"%s","swapUsed":"%s","cpuUtilization":"%s","disksJson":"%s"},\n' "$HOST" "$UPTIME" "$memTotal" "$memUsed" "$swapTotal" "$swapUsed" "$cpuUtilization" "$disksJson"

(#!/bin/bash
serverlist='/home/user/test/server_list.txt'
servers=`cat $serverlist`
for server in $servers;
do
set -e
# General OS props
HOST=$server
UPTIME=$(ssh user@${server} uptime | awk '{print $3" "$4}'| sed 's/\(.*\),/\1/')

printf '{"hostname":"%s","UPTIME":"%s","memtotal":"%s","memUsed":"%s","swaptotal":"%s","swapUsed":"%s","cpuUtilization":"%s","disksJson":"%s"},\n' "$HOST" "$UPTIME" "$memTotal" "$memUsed" "$swapTotal" "$swapUsed" "$cpuUtilization" "$disksJson"

我正在跟踪json输出。我需要在每个服务器输出之后都保持逗号,但是在最后一个服务器输出的末尾不需要逗号

{"hostname":"XXXXXXXX","UPTIME":"24 days","memtotal":"8052704","memUsed":"64.16%","swaptotal":"4190200","swapUsed":"0.00%","cpuUtilization":"0.00%","disksJson":"{"total":"493G", "used":"2%", "mountPoint":"/VEM"},
{"total":"80G", "used":"16%", "mountPoint":"/app_2"},
{"total":"829M", "used":"11%", "mountPoint":"/home"},
{"total":"1.9G", "used":"1%", "mountPoint":"/tmp"}"},

{"hostname":"XXXXXXXX","UPTIME":"11 days","memtotal":"8052704","memUsed":"40.58%","swaptotal":"4190200","swapUsed":"0.00%","cpuUtilization":"0.00%","disksJson":"{"total":"493G", "used":"2%", "mountPoint":"/VEM"},
{"total":"80G", "used":"16%", "mountPoint":"/app_2"},
{"total":"829M", "used":"11%", "mountPoint":"/home"},
{"total":"1.9G", "used":"1%", "mountPoint":"/tmp"}"}, ------- this comma needs to be removed))

1 个答案:

答案 0 :(得分:0)

尝试一下:

for循环结束后,添加以下内容:

done | sed '$ s/},/}/'