从 CURL 获取、合并和导出数据

从 CURL 获取、合并和导出数据

首先,英语不是我的语言。我会尽量让大家理解:-) 其次,我不是一个普通的 Linux 用户,我才刚刚开始。

我正在使用curl网络聊天平台的 API 来获取我的团队的状态。每个成员都拥有一个ID.对于每一个ID,我将结果通过管道传输到一个文本文件中agent-#.txt。因此,在我的文件夹中,如果我有 5 个成员,我会获得 5 个文件:agent-1.txtagent-2.txt依此类推。

每个文件都包含以下内容:

{
    "used": 0,
    "last": "2018-06-01 15:25:55",
    "presence": [],
    "away": false,
    "free": 3,
    "last_utc": "2018-06-01 13:25:55",
    "last_timezone": "Europe/Paris",
    "online": true,
    "offline": true
}

接下来,使用sedI 删除不需要的数据:

sed -i -e '/{/d; /last/d; /presence/d; /last_utc/d; /last_timezone/d; /offline/d; /}/d; s/"//g; s/,//g; s/[ ]//g; /^\s*$/d' *

对于每个文件,我得到:

used:#
away:false
free:#
online:true

其中#是一个数字(代理的已用槽位和可用槽位总数)。

好的,但现在我想合并这些数据以获得:

  1. 状态为的会员总数online:true
  2. 空闲和已用插槽总数

理想情况下,我正在搜索一个将在另一个文件中输出总数的命令。但我你有一个想法(命令,完整的脚本)来处理整个过程,我也很感兴趣!

答案1

使用未修改的 JSON 文件(在运行sed它们之前),以及jq:

在线人数:

jq -s 'map(select(.online))|length' agent-*.txt

空闲槽位数量:

jq -s '[.[].free]|add' agent-*.txt

已用槽数:

jq -s '[.[].used]|add' agent-*.txt

所有三个作为一个 JSON 文档:

jq -s '{online: map(select(.online))|length, free: [.[].free]|add, used: [.[].used]|add}' agent-*.txt

与上面相同,但只是数字:

jq -s '(map(select(.online))|length), ([.[].free]|add), ([.[].used]|add)' agent-*.txt

答案2

您可以连接agent-*.txt文件并通过 awk 处理它们。

请注意-F :使用完整列作为字段分隔符。

一个不完整的例子:

#!/bin/sh

awk -F : -f - agent-*.txt <<EOF
/^used:/{
    used+=\$2;
}
/^online:true/{
    online++;
}
END{
    printf("used: %d\n", used);
    printf("online: %d\n", online);
}
EOF

也许,如果您仔细更改匹配表达式,您可以跳过这sed一步。

相关内容