用于从Json文件创建表的JQ



刚开始使用Bash脚本,偶然发现jq可以处理JSON。我通过jq尝试了很多东西,但是无法获得正确的格式,因为数据改变了输出的可读性,

我现在有这个,但是随着数据的变化,表变得一团糟,

echo  "$(jq -r '[(.Results[].Vulnerabilities[] | {VulnerabilityID,PkgName,Severity,InstalledVersion,FixedVersion})] | ["VulnerabilityID","PkgName","       Severity","InstalledVersion","FixedVersion"], ["---------------","-------", "       -------", "----------------", "------------"], (.[] | [.VulnerabilityID, .PkgName, .Severity, .InstalledVersion, .FixedVersion]) | @tsv' json.json)" >> output.txt

我需要将如下所示的JSON字符串转换为在终端中输出的表。https://dpaste.org/iKG9n

我想在终端显示:

VulnerabilityID PkgName     Severity    InstalledVersion    FixedVersion
--------------- -------     -------     ----------------    ------------
CVE-2021-33910  libsystemd0 HIGH        237-3ubuntu10.43    237-3ubuntu10.49
CVE-2021-33910  libudev1    HIGH        237-3ubuntu10.43    237-3ubuntu10.49

您当然可以使用jq来检查列中的所有值,然后用空格(或破划线)填充每个项以使它们具有相等的宽度,但是已经有外部工具可以做到这一点。其中之一是来自util-linux的column。像这样使用:

jq -r '… | @tsv' json.json | column -t  # append >> output.txt if needed
VulnerabilityID  PkgName      Severity  InstalledVersion  FixedVersion
---------------  -------      -------   ----------------  ------------
CVE-2021-33910   libsystemd0  HIGH      237-3ubuntu10.43  237-3ubuntu10.49
CVE-2021-33910   libudev1     HIGH      237-3ubuntu10.43  237-3ubuntu10.49

最新更新