Linux 条件grep的bash脚本

Linux 条件grep的bash脚本,linux,bash,shell,awk,grep,Linux,Bash,Shell,Awk,Grep,我有一个以下格式的json文件,如果errorCode为1,我想编写一个bash脚本来对id执行操作 如果errorCode为1,则对id执行操作,否则不执行任何操作 [{ "endTime": null, "errorCode": 1, "id": 219759099, }, { "endTime": null, "errorCode": 0, "id": 219759100, }, { "endTime": null,

我有一个以下格式的json文件,如果errorCode为1,我想编写一个bash脚本来对id执行操作

如果errorCode为1,则对id执行操作,否则不执行任何操作

[{
    "endTime": null, 
    "errorCode": 1, 
    "id": 219759099, 
}, 

{
    "endTime": null, 
    "errorCode": 0, 
    "id": 219759100, 
}, 

{
   "endTime": null, 
    "errorCode": 0, 
    "id": 219759101, 
}]

这将实现以下目的:

parity=0
for val in $(grep -E "errorCode|id" x.json|grep -Eo [0-9]+)
do
    if [ $parity -eq 0 ]
    then
            if [ $val -eq 1 ]
            then
            parity=1
            fi
    else
            echo "id $val is erroneous"
            parity=0
    fi
done
其中x.json是jason文件。根据您的要求,用合适的语句替换包含echo命令的行。例如,如果要将id附加到错误日志,请尝试:

echo $val >> erroneousIDs.log

注意:我假设字段的顺序总是相同的

我会使用一种带有适当的
JSON
解析器的语言,比如
python
。给出一个有效的
JSON
文件,如:

[
    {
        "endTime": null,
        "errorCode": 1,
        "id": 219759099
    },
    {
        "endTime": null,
        "errorCode": 0,
        "id": 219759100
    },
    {
        "endTime": null,
        "errorCode": 0,
        "id": 219759101
    }
]
您可以使用以下脚本:

#!/usr/bin/env python
import sys
import json

try:
    json_data=open(sys.argv[1])
except IndexError:
    sys.stderr.write("Please provide a JSON file.\n")
    sys.exit(1)

data = json.load(json_data)

for d in data:
    if d["errorCode"] == 1:
        print d["id"]
将其保存到文件中,使其可执行并运行,如下所示:

$ ./get_ids.py file
219759099

您可以将其导入
操作
命令或扩展脚本以执行该操作

您可能需要查看以获得更稳健的方法。它使用sed和awk来解析JSON。

使用awk:

awk -F '[ ":,]+' '$2=="errorCode" && $3==1{err=1} err && $2=="id"{print $3; err=0}' f.json
输出:

219759099

尽管我必须提醒大家,使用shell解析JSON并不是解析JSON的最佳方式,而且如果JSON文件的格式发生变化,它也可能容易出错。

尝试使用
JSON
解析器并执行什么操作?我必须在bash中执行,operation1可以是任何linux命令。您所说的
bash
是什么意思?仅使用内置的
bash
或UNIX CLI环境中常见的任何工具/语言。使用Shell。像grep一样,如果错误代码与'1'匹配,则首先在文件中写入id的值。此脚本可以帮助您在bash.+1中解析JSON,以获得正确的JSON解析器@shivam,注意“一个有效的JSON文件”--不能在右大括号前有一个尾随逗号。