linux - 如何使用 Bash 将柱状标记数据转换为 json?

标签 linux bash awk command-line jq

<分区>

假设我从表达式中得到以下标准输出

 Min 1st_Qu Median Mean 3rd_Qu Max NAs 
  1.000 1.000 2.000 1.875 2.250 3.000       1 

目标是:

{ "Min":1.0, "1st_Qu":1.0, ..., "NAs":1 }

有没有一种简单的方法可以用 bash 做到这一点? (还试图限制依赖性,并且宁愿使用 awk 来挑选我需要的东西,而不是添加任何非本地 linux 依赖性)。

最佳答案

以下内容可能算作微不足道,但不会保留数字的精度。它假定分隔符是正则表达式“+”,但您可以轻松更改它,例如如果值分隔符是制表符,则为“\t”:

jq -n -R '[inputs | [splits(" +") | select(length>0)]]
  | transpose | map({(.[0]): .[1]|tonumber}) | add'

处理多个数据行

下面假设一个jq -nR调用:

def zip(headers):
  . as $in
  | reduce range(0; headers|length) as $i ({}; .[headers[$i]] = ($in[$i]) );

def s2a: [splits(" +") | select(length>0)];

(input | s2a) as $h
| inputs | s2a | map(tonumber) | zip($h)

关于linux - 如何使用 Bash 将柱状标记数据转换为 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57913058/

相关文章:

linux - echo --version 不起作用

linux - Shell 的交错脚本

regex - 将 bash 正则表达式模式作为 awk 中更大的正则表达式模式的一部分传递

linux - 使用 awk 或 sed 重新排列具有空值的列

linux - 从一个巨大的(有数百万条记录和列)OFS 文件(没有固定标题行)unix 中查找所有唯一列

c - 在 C 中的第五个字符后插入连字符

c# - SshNet命令执行

bash - 不在 git 存储库中时无法抑制 git 分支错误

linux - bash 脚本,第 30 行 : syntax error: unexpected end of file

mysql - 使用 awk 替换两个字符串或模式之间的文本