Wil*_*Wil 3 string json substr slice jq
希望你在这些时候一切都好。
我遇到了一个问题,希望你有更多的知识。
使用 'jq' 我想更改所有日期,例如。19731013(字符串)到 1973-10-13
[
{
"Mail": "john@example.com",
"Name": "Smith",
"Employee_Number": "000555",
"First_Name": "John",
"Company": "ACME",
"Department": null,
"Employment_Status": "Retiree",
"Start_Date": "19770516",
"Function_Start_Date": "19770516",
"Group_Phone": "",
"Job_Title": "Operations Manager Warehousing",
"Sub_Group": "Exempts",
"Location": "Tibuktu",
"Organizational_Unit": null,
"Date_of_Birth": "19560719",
"Gender": "1"
},
{
"Mail": "mary@example.com",
"Name": "Smith",
"Employee_Number": "000777",
"First_Name": "Mary",
"Company": "ACME",
"Department": null,
"Employment_Status": "Retiree",
"Start_Date": "19770516",
"Function_Start_Date": "19770516",
"Group_Phone": "",
"Job_Title": "Manager",
"Sub_Group": "Exempts",
"Location": "Tibuktu",
"Organizational_Unit": null,
"Date_of_Birth": "19560719",
"Gender": "2"
}
]
Run Code Online (Sandbox Code Playgroud)
是否可以substr(.Start_Date,1,5)"-"substr(.Start_Date,6,2)"-"substr(.Start_Date,8,3)在 CSV 中将 like 与 awk一起使用?
也许我正盯着墙而错过了右边的门?
更新:感谢很多人,这就像一个魅力!
jq -r '.[].Start_Date |= "\(.[0:4])-\(.[4:6])-\(.[6:8])" | .[].Function_Start_Date |= "\(.[0:4])-\(.[4:6])-\(.[6:8])" | .[].Date_of_Birth|="\(.[0:4])-\(.[4:6])-\(.[6:8])"' employees.json > test.json
Run Code Online (Sandbox Code Playgroud)
$ jq '.[].Start_Date | "\(.[0:4])-\(.[4:6])-\(.[6:8])"' file
"1977-05-16"
"1977-05-16"
Run Code Online (Sandbox Code Playgroud)
jq使用中还有正则表达式匹配函数capture,它会发出命名的捕获组,稍后可以将其连接起来-以形成您想要的日期字符串。
jq '.[].Start_Date | capture("(?<x>[0-9]{4})(?<y>[0-9]{2})(?<z>[0-9]{2})") | join("-")'
Run Code Online (Sandbox Code Playgroud)
这是假设,您的Start_Date字段至少有 8 个字符长,并且不会验证小于该长度的长度。