刚开始使用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