Shell-Script

獲取 grepped 行下方的特定行

  • May 2, 2017

我在下面遇到了一個具有挑戰性的問題

我在文件中有以下文本:

create table "ctronsys".activity_codes
(
  code_list_id varchar(8),
  code_id varchar(10),
  record_type varchar(1),
  active_status_ind varchar(1),
  security_level varchar(1),
  short_description varchar(10),
  long_description varchar(30),
  record_class varchar(1),
  owner_id varchar(4),
  modify_user_id varchar(3),
  modify_date date,
  create_user_id varchar(3),
  create_date date
) in datadbs extent size 16 next size 16 lock mode row;

我的目標是在文本文件中查找以下行:

create table "ctronsys".activity_codes

並使用上面的來檢索下面的行:

) in datadbs extent size 16 next size 16 lock mode row;

請注意,下面要搜尋的行數根據表結構不具體

我有以下命令,它允許我使用 awk 在 grepped 行上方的一行中列印一列,但是這只列印該行中的一列,而我想列印整行:

cat table_structure | awk -v key="datadbs" '/^create/ {val=$3} $3 == key {print val;}'

使用awk

awk 'BEGIN { FS="\n[()]"; RS=";" } /^create table "ctronsys".activity_codes/ { print $NF }' file
in datadbs extent size 16 next size 16 lock mode row

我們將文件內容劃分為- 分隔的;記錄。(每條記錄根據行首的或劃分為欄位)

讀取文件時,第一條記錄將是該特定文件的全部內容。

該記錄的第一個欄位是

create table "ctronsys".activity_codes

第二個欄位是

  code_list_id varchar(8),
  code_id varchar(10),
  record_type varchar(1),
  active_status_ind varchar(1),
  security_level varchar(1),
  short_description varchar(10),
  long_description varchar(30),
  record_class varchar(1),
  owner_id varchar(4),
  modify_user_id varchar(3),
  modify_date date,
  create_user_id varchar(3),
  create_date date

最後一個欄位是

in datadbs extent size 16 next size 16 lock mode row

引用自:https://unix.stackexchange.com/questions/362623