履歴を含むファイルがあります。記録形式は次のとおりです。
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
。