如何将 lscpu 输出转换为没有尾随空格的 JSON 格式?

如何将 lscpu 输出转换为没有尾随空格的 JSON 格式?

我尝试通过标志将其转换为 JSON 格式-J,但旧lscpu版本没有此功能。我在这里找到的解决方案对我没有帮助。

我想在这里提出我从另一个社区成员那里得到的解决方案。

答案1

关于解决方案@palmasd1

LANG=C
lscpu | 
sed -r 's/$ //g;s/ [ ]+//g' | 
awk -F ':' 'BEGIN{printf"{\"cpu\":["}{print x"{\""$1"\":\""$2"\"}";x=","}END{printf"]}"}' | 
tr -d '\n'

解释:

  • LANG=C:翻译停用
  • lscpu: 命令
  • awk -F ';' ...:使用:字符作为输入字段分隔符
   BEGIN {
       printf "{\"cpu\":["
   }
   {
       print x "{\""$1"\":\""$2"\"}"
       x=","
   }
   END {
       printf "]}"
   }
    • BEGIN { ... }:在所有行处理之前执行
    • { ... }:每行处理
      • x变量用于在除第一行之外的每一行之前添加逗号,其中第一行x是空的
      • $1$2包含第一个和第二个字段值
    • END { ... }:在所有行处理之后执行
  • tr -d '\n':删除所有换行符(*UNIX* 系统下为换行符)

关于此脚本的个人说明:

  1. lscpu -J它与命令的格式并不完全相同
  2. 输出格式无法防御 JSON 特殊字符(如/"...)以及包含:字符的字段值

答案2

LANG=C

lscpu   |   sed -r 's/$ //g;s/ [ ]+//g'  | 
awk -F ':' 'BEGIN{printf"{\"cpu\":["}{print x"{\""$1"\":\""$2"\"}";x=","}END{printf"]}"}'  | 
tr -d '\n'

解释

  1. 的输出lscpu被输入到sed其中,删除行前面的所有空格,并且所有双空格都被单空格替换。
  2. awk通过将标签和数据括在双引号中,将每行重新格式化为 JSON。还将每行括在花括号中,并在除第一行之外的每一行前面加上逗号。
  3. 最后,tr删除所有新行,只留下一行输出。

可以通过将输出传输到jq

相关内容