Coo*_*007 5 grep awk text-processing
我需要帮助"db-unique-name"才能找到lifecycle-state": "AVAILABLE".
cat db_systems.txt
"db-unique-name": "p00z5bj_iad2bj",
"db-workload": "OLTP",
"defined-tags": {},
"freeform-tags": {},
"id": "dfadfasfsadfasdfasdf",
"lifecycle-details": null,
"lifecycle-state": "AVAILABLE",
--
"db-unique-name": "p00u5bh_iad2bj",
"db-workload": "OLTP",
"defined-tags": {},
"freeform-tags": {},
"id": "asdfsadfasdfasfd",
"lifecycle-details": "Resource was terminated at the backend.",
"lifecycle-state": "FAILED",
--
"db-unique-name": "p00u5bh_iad2bj",
"db-workload": "OLTP",
"defined-tags": {},
"freeform-tags": {},
"id": "asdfasdfasdf",
"lifecycle-details": "Resource was terminated at the backend.",
"lifecycle-state": "FAILED",
enter code here
Run Code Online (Sandbox Code Playgroud)
"db-unique-name"基于 的尝试值"lifecycle-state": "AVAILABLE"。以下,但它给出了错误的价值
cat db_systems.txt | egrep -A -6 "lifecycle-state|AVAILABLE" | grep db-unique-name
"db-unique-name": "p00u5bh_iad2bj",
"db-unique-name": "p00u5bh_iad2bj",
Run Code Online (Sandbox Code Playgroud)
我也试过这个,但它列出了所有这些
cat db_systems.txt | awk -F";" '{for(i=1;i<=NF;i++){if ($i ~ /AVAILABLE|db-unique-name/){print $1}}}' | grep db-unique-name
"db-unique-name": "p00z5bj_iad2bj",
"db-unique-name": "p00u5bh_iad2bj",
"db-unique-name": "p00u5bh_iad2bj",
Run Code Online (Sandbox Code Playgroud)
你可以用 GNU 试试这个awk:
awk -F',' 'BEGIN { RS = "--" } /"lifecycle-state": "AVAILABLE"/ { gsub("^[[:blank:]]*", "", $1); print $1 }' file
Run Code Online (Sandbox Code Playgroud)
输出:
"db-unique-name":"p00z5bj_iad2bj"
Run Code Online (Sandbox Code Playgroud)
尝试这个,
使用grep:
grep -B6 AVAILABLE file | grep db-unique-name
"db-unique-name": "p00z5bj_iad2bj",
Run Code Online (Sandbox Code Playgroud)
B在匹配行之前打印 NUM 行前导上下文。使用awk:
awk '{a[++i]=$0;}/AVAILABLE/{print a[NR-6];}' file
"db-unique-name": "p00z5bj_iad2bj",
Run Code Online (Sandbox Code Playgroud)