Chinaunix

标题: 将df -h输出成json数组,怎么去掉最后一行的","? [打印本页]

作者: yaoyefengyun    时间: 2015-07-16 09:30
标题: 将df -h输出成json数组,怎么去掉最后一行的","?
本帖最后由 yaoyefengyun 于 2015-07-16 09:59 编辑

#!/bin/bash

printf "[\n"
df -h | awk 'NR>1 {printf "{\"Filesystem\":\"%s\",\"Size\":\"%s\",\"Used\":\"%s\",\"Avail\":\"%s\"},\n", $1, $2, $3, $4}'
printf "]"

这个脚本会输出类似如下信息:

[
{"Filesystem":"/dev/sda5","Size":"46G","Used":"299M","Avail":"44G"},
{"Filesystem":"udev","Size":"10M","Used":"0","Avail":"10M"},
{"Filesystem":"tmpfs","Size":"774M","Used":"1.1M","Avail":"773M"},
{"Filesystem":"/dev/sda6","Size":"46G","Used":"5.4G","Avail":"38G"},
{"Filesystem":"tmpfs","Size":"1.9G","Used":"160K","Avail":"1.9G"},
{"Filesystem":"tmpfs","Size":"5.0M","Used":"4.0K","Avail":"5.0M"},
{"Filesystem":"tmpfs","Size":"1.9G","Used":"0","Avail":"1.9G"},
{"Filesystem":"/dev/sda7","Size":"28G","Used":"2.7G","Avail":"24G"},
{"Filesystem":"/dev/sda8","Size":"28G","Used":"45M","Avail":"26G"},
{"Filesystem":"/dev/sda1","Size":"453M","Used":"41M","Avail":"386M"},
{"Filesystem":"/dev/sda2","Size":"275G","Used":"47G","Avail":"215G"},
{"Filesystem":"tmpfs","Size":"387M","Used":"8.0K","Avail":"387M"},
{"Filesystem":"tmpfs","Size":"387M","Used":"24K","Avail":"387M"},
]

最后一个{...}行末尾的","该怎么去掉啊?(之前没说清楚,补充下)

================================
最后一行的","该怎么去掉啊
作者: haooooaaa    时间: 2015-07-16 09:34
这东西从哪来的, 你直接去掉? 
作者: yaoyefengyun    时间: 2015-07-16 09:34
我自己写的一个脚本,刚学shell编程,不太会..回复 2# haooooaaa


   
作者: haooooaaa    时间: 2015-07-16 09:39
回复 3# yaoyefengyun


    直接删除?
作者: yaoyefengyun    时间: 2015-07-16 09:43
嗯,直接删除就可以,如果能教教最后一行不显示","的脚本该怎么写就更好了。回复 4# haooooaaa


   
作者: leijskg    时间: 2015-07-16 09:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: yaoyefengyun    时间: 2015-07-16 09:48
实在抱歉,之前没说清楚,下次提问时我会注意的...回复 6# leijskg


   
作者: haooooaaa    时间: 2015-07-16 09:51
如果这个数据是你脚本生成 的, 你直接 去掉啊,


不是,就 用  gsub("},","}") 类似这样...
作者: yaoyefengyun    时间: 2015-07-16 09:53
好像回复没出来,这样脚本会输出类似这样的数据:

[
{"Filesystem":"/dev/sda5","Size":"46G","Used":"299M","Avail":"44G"},
{"Filesystem":"udev","Size":"10M","Used":"0","Avail":"10M"},
{"Filesystem":"tmpfs","Size":"774M","Used":"1.1M","Avail":"773M"},
{"Filesystem":"/dev/sda6","Size":"46G","Used":"5.4G","Avail":"38G"},
{"Filesystem":"tmpfs","Size":"1.9G","Used":"160K","Avail":"1.9G"},
{"Filesystem":"tmpfs","Size":"5.0M","Used":"4.0K","Avail":"5.0M"},
{"Filesystem":"tmpfs","Size":"1.9G","Used":"0","Avail":"1.9G"},
{"Filesystem":"/dev/sda7","Size":"28G","Used":"2.7G","Avail":"24G"},
{"Filesystem":"/dev/sda8","Size":"28G","Used":"45M","Avail":"26G"},
{"Filesystem":"/dev/sda1","Size":"453M","Used":"41M","Avail":"386M"},
{"Filesystem":"/dev/sda2","Size":"275G","Used":"47G","Avail":"215G"},
{"Filesystem":"tmpfs","Size":"387M","Used":"8.0K","Avail":"387M"},
{"Filesystem":"tmpfs","Size":"387M","Used":"24K","Avail":"387M"},
]

是指最后一个{...}行末尾的","怎么去掉回复 6# leijskg


   
作者: haooooaaa    时间: 2015-07-16 09:58
awk '{sub("},","}")}1'  file  就这样.
作者: yaoyefengyun    时间: 2015-07-16 10:04
嗯,解决了,thx!回复 11# haooooaaa


   
作者: yaoyefengyun    时间: 2015-07-16 10:04
嗯,解决了,thx!回复 11# haooooaaa


   
作者: MMMIX    时间: 2015-07-16 10:12
回复 1# yaoyefengyun


    可以使用 join 函数:

  1. @include "join"

  2. BEGIN { print "["}

  3. NR > 1 {
  4.     a[NR] = sprintf("{\"Filesystem\":\"%s\",\"Size\":\"%s\",\"Used\":\"%s\",\"Avail\":\"%s\"}", $1, $2, $3, $4)
  5. }

  6. END {
  7.     print join(a, 2, NR, ",\n")
  8.     print "]"
  9. }
复制代码

作者: leijskg    时间: 2015-07-16 10:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: yaoyefengyun    时间: 2015-07-16 10:27
shell脚本太神奇了,谢谢!回复 15# leijskg


   
作者: yaoyefengyun    时间: 2015-07-16 10:29
这个还不懂,过段时间学习下,谢谢你!回复 14# MMMIX


   
作者: hjfeng1988    时间: 2015-07-16 10:29
  1. df -h | awk 'NR>1 {printf "{\"Filesystem\":\"%s\",\"Size\":\"%s\",\"Used\":\"%s\",\"Avail\":\"%s\"},\n", $1, $2, $3, $4}' | sed '$s/,$//'
复制代码

作者: yaoyefengyun    时间: 2015-07-16 10:38
谢谢,好像回复没显示出来...回复 18# hjfeng1988


   
作者: 张馆长    时间: 2017-05-18 11:24
sed '1!N;s#,\n]#\n]#'
作者: 799029078    时间: 2017-05-18 12:35
帖子好久了





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2