AIX で -A/-B 交換前/後の Grep ライン

AIX で -A/-B 交換前/後の Grep ライン

-B私はinとフラグをサポートしていないAIX 6.1を使用しています-A

grep: Not a recognized flag: B

私が実行したいとしましょう。

cat file | grep -E -B4 'Directory entry type.*Indirect' | grep "Database name" | awk  '{print $4}'

AIXでこのロジックをどのように実装しますか?

編集する

私の実際のコードは次のとおりです。

NAME_EXISTS=`db2 LIST DB DIRECTORY | grep -E -B5 'Directory entry type.*Remote' | grep "Database alias" | awk '{print $4}' | grep -i ${NAME} | wc -l`
if [ ${NAME_EXISTS} -gt 0 ]; then
    db2 LIST DB DIRECTORY | grep -E -A5 "Database alias.*${NAME}"
fi

アイデアは、名前のリモートデータベースが存在するかどうかを探し$NAME、見つかった場合は最初の5行を表示することですDatabase alias.*${NAME}$NAMEユニークですDatabase alias

出力はdb2 LIST DB DIRECTORY次のとおりです。

 System Database Directory

 Number of entries in the directory = 3

Database 1 entry:

 Database alias                       = OLTPA
 Database name                        = OLTPA
 Local database directory             = /db2/data
 Database release level               = 10.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

Database 2 entry:

 Database alias                       = OLTPF
 Database name                        = OLTP
 Node name                            = OLTPN
 Database release level               = 10.00
 Comment                              =
 Directory entry type                 = Remote
 Catalog database partition number    = -1
 Alternate server hostname            =
 Alternate server port number         =

Database 3 entry:

 Database alias                       = ADMIN
 Database name                        = ADMIN
 Local database directory             = /db2/data
 Database release level               = 10.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

NAME=OLTPF出力は次のとおりです。

 Database alias                       = OLTPF
 Database name                        = OLTP
 Node name                            = OLTPN
 Database release level               = 10.00
 Comment                              =
 Directory entry type                 = Remote

NAME=OLTPE出力が出ないからです。

ベストアンサー1

edはこれを行う簡単な方法を提供できます。

一致するものが1つしかないと仮定できる場合、パイプラインの代替案はedを使用し、不要なcatと補助grepを削除することです。

ed -s file <<\EOED | awk '/Database name/ {print $4}'
    /Directory entry type.*Indirect/-4,//p
    q
EOED

1つ以上の場合、重複なし一致する場合は、edのグローバルコマンドを使用して表示できます。

ed -s file <<\EOED | awk '/Database name/ {print $4}'
    g/Directory entry type.*Indirect/-4,.p
    q
EOED

重複した一致ケースを説明するために文字列を一致させ、foo7行と9行に一致があり、各一致の最初の3行をコンテキストとして使用すると仮定すると、出力は次のようになります。

line 4      <--- context
line 5      <--- context
line 6      <--- context
line 7 foo  <--- matched
line 6      <--- context      <--- repeated
line 7 foo  <--- context      <--- repeated
line 8      <--- context
line 9 foo  <--- matched
line 10
line 11

おすすめ記事