簡體   English   中英

有條件grep的bash腳本

[英]bash script for conditional grep

我有以下格式的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, 
}]

我會使用一種具有適當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

您可以將其通過管道傳遞到operation命令中,也可以擴展腳本來執行操作。

這將達到目的:

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

注意:我假設字段的順序將始終相同。

您可能需要查看一下此方法以獲得更強大的方法。 它雖然使用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文件的格式更改,它也容易出錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM