bash - Awk:将输出格式化为 json

标签 bash awk

<分区>

我正在尝试创建一个脚本,该脚本将以 json 格式返回机器的磁盘使用情况。这是命令 -

df -k $1 | grep -v Filesystem | gawk 'BEGIN { ORS = ""; print " [ "} {printf " { \"name\" : \""$1"\", \"usage\" : \""$5"\", \"mount_point\" : \""$6"\" }" } END { print " ] " }'`

得到的输出是-

 [  { "name" : "/dev/sda4", "usage" : "36%", "mount_point" : "/" } { "name" : "udev", "usage" : "1%", "mount_point" : "/dev" } { "name" : "tmpfs", "usage" : "0%", "mount_point" : "/dev/shm" } { "name" : "/dev/sda1", "usage" : "17%", "mount_point" : "/boot" }  ]

如果您观察,两个 json 对象之间缺少一个逗号。如何在命令中添加它?

最佳答案

df -k $1  | gawk '
    BEGIN { ORS = ""; print " [ "}
    /Filesystem/ {next}
    { printf "%s{\"name\": \"%s\", \"usage\": \"%s\", \"mount_point\": \"%s\"}",
          separator, $1, $5, $6
      separator = ", "
    }
    END { print " ] " }
'

第一次通过时,分隔符变量为空,然后分配给第二行。

关于bash - Awk:将输出格式化为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16972804/

相关文章:

linux - Hadoop - 列出 HDFS 目录中的所有子目录并将每个目录路径保存到 bash 变量中

linux - Awk 与 Awk + ​​cut 与 bash

Bash 添加换行符(如果缺少)

bash - 即使测试失败,TravisCI构建也会成功

linux - 将列表 1 中的字符串与列表 2 中的值进行比较,并导出到新位置

bash - 在shell脚本中将十进制数转换为十六进制和二进制

xml - 使用 bash 脚本从 XML 文件中提取特定关键字

linux - 使用 bash 计算字符串中子字符串的出现次数

bash - 如何使用 bash 大括号扩展制作乘法表?到目前为止我有这个 : echo $[{1. .10}*{1..10}]

linux - UNIX 命令中的隐式系统调用