使用jq json cli格式化以千为单位的数字分隔符

使用jq json cli格式化以千为单位的数字分隔符,json,formatting,integer,jq,Json,Formatting,Integer,Jq,给定{a:1234567890},我希望结果中包含1234567890,如何使用jq实现这一点 echo '{"a": 1234567890}' | jq '.a | FORMAT?' 感谢@peak的回答,解决方案是 echo '{"a": 1234567890}' | jq -r 'def h: [while(length>0; .[:-3]) | .[-3:]] | reverse | join(","); .a | tostring | h' //-> 1,234,567,

给定{a:1234567890},我希望结果中包含1234567890,如何使用jq实现这一点

echo '{"a": 1234567890}' | jq '.a | FORMAT?'
感谢@peak的回答,解决方案是

echo '{"a": 1234567890}' | jq -r 'def h: [while(length>0; .[:-3]) | .[-3:]] | reverse | join(","); .a | tostring | h'
//-> 1,234,567,890
jq还没有一个printf函数来根据区域设置进行格式化。 如果这是一个选项,您可以使用printf将数字传递给shell:

请注意,printf转换依赖于man 3 printf中解释的格式%'.f,jq还没有根据区域设置格式化的printf函数。 如果这是一个选项,您可以使用printf将数字传递给shell:


请注意,printf转换依赖于man 3 printf中解释的格式%'.f。这里是一个用于整数或整数值字符串的通用解决方案:

# "h" for "human-readable"
def h:
  def hh: .[0] as $s | .[1] as $answer
    | if ($s|length) == 0 then $answer
      else ((if $answer == "" then "" else "," end) + $answer ) as $a
      | [$s[0:-3], $s[-3:] + $a] | hh
      end;
   [ tostring, ""] | hh;
实例 使用-r选项的结果:
以下是整数或整数值字符串的通用解决方案:

# "h" for "human-readable"
def h:
  def hh: .[0] as $s | .[1] as $answer
    | if ($s|length) == 0 then $answer
      else ((if $answer == "" then "" else "," end) + $answer ) as $a
      | [$s[0:-3], $s[-3:] + $a] | hh
      end;
   [ tostring, ""] | hh;
实例 使用-r选项的结果:
下面是一个惯用的单行定义:

def h: tostring | [while(length>0; .[:-3]) | .[-3:]] | reverse | join(",");
实例 使用-r选项输出:
下面是一个惯用的单行定义:

def h: tostring | [while(length>0; .[:-3]) | .[-3:]] | reverse | join(",");
实例 使用-r选项输出:
1234567应如何格式化?1234567或1234567?@Inian 1234567 1234567应如何格式化?1234567还是1234567?@Inian 1234567
def h: tostring | [while(length>0; .[:-3]) | .[-3:]] | reverse | join(",");
12, 123, 1234, 12345678 | h
12
123
1,234
12,345,678