1

作成中の perl スクリプトがあり、ファイルから数行を取得する必要があります。一致させたい最初の行を知っていて、それを文字列に入れています。文字列の内容...

DEFINE QLOCAL ('NAME.OF.QUEUE1') +

上記の行を、取得したいテキスト ブロックの 1 行目に一致させ、次の空白行までのすべてを配列にダンプする必要があります。

サンプルデータファイル

DEFINE QLOCAL ('NAME.OF.QUEUE0') +
  DESCR('Description') +
  PUT(DISABLED) +
  GET(DISABLED) +
  RETURN

DEFINE QLOCAL ('NAME.OF.QUEUE1') +
  DESCR('Description') +
  PUT(ENABLED) +
  GET(ENABLED) +
  RETURN

DEFINE QREMOTE ('NAME.OF.QUEUE1') +
  DESCR('Description') +
  PUT(ENABLED) +
  GET(DISABLED) +
  MAXDEPTH(1000) +
  RETURN

次のawkコマンドを機能させようとしています

awk '/$Object/' RS= file.txt

$Object が NAME.OF.QUEUE1 だけの場合、結果を取得できますが、QLOCAL と QREMOTE の両方に対するものです。NAME.OF.QUEUE1 だけでなく、行全体を一致させる必要があります。$Object を最初の行全体に設定すると、結果が得られません。

これは私が Perl から呼び出していたものであり、動作していません

my $Object="DEFINE QLOCAL ('NAME.OF.QUEUE1') +\n";
my @ObjectValues = `awk '/$Object/' RS= file.txt`;

どんな助けでも大歓迎です。

ありがとうございました

4

1 に答える 1

2

シェル変数があるとしますObject:

Object="DEFINE QLOCAL ('NAME.OF.QUEUE1') +"

\nで終わっていないことに注意してください。次のObjectことができます。

awk -v o="$Object" -v RS= -F'\n' '$1==o' file

あなたのファイルで、それは出力します:

kent$  awk -v o="$Object" -v RS= -F'\n' '$1==o' file
DEFINE QLOCAL ('NAME.OF.QUEUE1') +
  DESCR('Description') +
  PUT(ENABLED) +
  GET(ENABLED) +
  RETURN
于 2013-10-03T21:02:17.780 に答える