如何根据匹配的搜索值grep特定值

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)

sch*_*ity 5

你可以用 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)


Siv*_*iva 3

尝试这个,

使用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)