bash
다음과 같이 JSON 파일의 숫자에서 모든 소수 자릿수를 효과적으로 제거하기 위해 스크립트에서 실행할 수 있는 셸 명령은 무엇입니까 ?
[
{
"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
예를 들어 등.
답변1
ID 필터를 통해 실행하고 jq
소수가 포함된 숫자를 정수 .0
로 다시 포맷하세요.
$ 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.)
소수 자릿수가 0이 아닌 숫자가 있고 그 숫자도 제거하려면 다음을 사용하십시오.
jq '(.. | select(type == "number" )) |= floor' file.json
이는 floor
데이터의 모든 숫자에 함수를 적용하고 가장 가까운 정수로 내림합니다.
또한 끝의 점 뒤에 숫자가 포함된 문자열이 있는지 조사하고 해당 숫자(및 점)를 제거합니다.
jq '(.. | select(type == "string")) |= sub("\\.[0-9]+$"; "")' file.json
영향을 받는 항목은 여전히 문자열이며 숫자 유형으로 변환되지 않습니다.