ファイルのレコードから文字列を選択

ファイルのレコードから文字列を選択

履歴を含むファイルがあります。記録形式は次のとおりです。

Record: XXXXXX [
{variable number of lines and content}
]

記録のある時点で、以下があるかもしれません。

Start to do this thing

「start」という単語に一致するレコード番号とレコードの行を抽出したいと思います。

現在私が使用している

egrep "Record|Start" inputfile.txt >> outputfile.txt

Recordただし、一致しない一致する行を手動で削除する必要がありますStart。理想的には、このステップが完了することを願っています。どんな提案にも感謝します。

答え1

アッ解決策:

サンプルinput.txtファイル:

Record: 111111 [
text
test
Start to do this thing
text
]
Record: 222222 [
{variable number of lines and content}
]
Record: 333333 [
text
text
text
Start to do another thing
text
]

働く:

awk '/^Record: .*\[$/{ f=1; n=$2 }/^\]/{f=0}f && /^Start/{ print n, $0 }' input.txt

出力:

111111 Start to do this thing
333333 Start to do another thing

答え2

サンプルファイルを使用して修正を適用し、3回連続して繰り返します。

Record: XXXXXX [
{variable number of lines and content}
Start to do this thing
]
Record: YYYYYY [
{variable number of lines and content}
Stop doing this thing
]
Record: ZZZZZZ [
{variable number of lines and content}
Start again
]

それから:

$ awk '/^Record:/ { r = $2 } /^Start/ { print r ":", $0 }' file
XXXXXX: Start to do this thing
ZZZZZZ: Start again

で始まる行が表示されたら、レコード番号/ラベルを選択してRecord:変数に保存しますr。次に、で始まる行を見つけたら、見つかったStartレコードラベルとその行を印刷します。

行がない場合スタート場合は、単語と行の始まりの間にスペースを入れるように正規表現をStart変更する必要があるかもしれません。/^Start//^ *Start/

以下があると失敗します。その他ファイル内のトランザクション間で一致するレコードが記録されますStart

関連情報