次のようなJSONファイルの数値からすべての小数点以下の桁数を効率的に取り除くために、bash
スクリプトのどのシェルコマンドを発行できますか。
[
{
"IMSKU": "1000001",
"AttributeID": 7332.0,
"Value": "McAfee Host Intrusion Prevention for Desktops safeguards your business against complex security threats that may otherwise be unintentionally introduced or allowed by desktops and laptops. Host Intrusion Prevention for Desktops is easy to deploy, configure, and manage.",
"Unit": null,
"StoredValue": null,
"StoredUnit": null,
"Name": "Marketing text",
"Format": "1",
"Position": "1",
"Group_Name": "Basic Specification",
"AGGroup_Position": 0.0,
"Product_Hierarchy": 15198001453.0
},
{
"IMSKU": "1000001",
"AttributeID": 7343.0,
"Value": "May 2013",
"Unit": null,
"StoredValue": null,
"StoredUnit": null,
"Name": "PI Date",
"Format": "1",
"Position": "1",
"Group_Name": "PI DATE",
"AGGroup_Position": 1.0,
"Product_Hierarchy": 15198001453.0
},
{
"IMSKU": "1000001",
"AttributeID": 7344.0,
"Value": "McAfee",
"Unit": null,
"StoredValue": "0.00",
"StoredUnit": null,
"Name": "Brand Name",
"Format": "3",
"Position": "1",
"Group_Name": "PRODUCT",
"AGGroup_Position": 2.0,
"Product_Hierarchy": 15198001453.0
}
]
そのため
"AttributeID": 7344.0
なるだろう
"AttributeID": 7344
たとえば、など。
jq
を使用してIDフィルターを実行するだけで、.0
10進数が整数として含まれる数値が再フォーマットされます。
$ jq . file.json
[
{
"IMSKU": "1000001",
"AttributeID": 7332,
"Value": "McAfee Host Intrusion Prevention for Desktops safeguards your business against complex security threats that may otherwise be unintentionally introduced or allowed by desktops and laptops. Host Intrusion Prevention for Desktops is easy to deploy, configure, and manage.",
"Unit": null,
"StoredValue": null,
"StoredUnit": null,
"Name": "Marketing text",
"Format": "1",
"Position": "1",
"Group_Name": "Basic Specification",
"AGGroup_Position": 0,
"Product_Hierarchy": 15198001453
},
(etc.)
ゼロではない小数の数値があり、それらも削除したい場合は、
jq '(.. | select(type == "number" )) |= floor' file.json
これにより、データ内のすべての数値にfloor
関数が適用され、最も近い整数に切り捨てられます。
最後のドットの後に数字を含む文字列があるかどうかを調査し、これらの数字(およびドット)を削除するには:
jq '(.. | select(type == "string")) |= sub("\\.[0-9]+$"; "")' file.json
影響を受けるエントリは依然として文字列であり、数値型に変換されません。