私のファイルには次の行が含まれています。
$BQ
{ VOL @home }
database daba
relation tcdeatid
opendb
clear
.lruno := 72 <-- (This line lruno. := 72 has 10 times in my file1)
.infno := 1
.tid.noel := 101
writedb
clear
.lruno := 72
.infno := 205
.tid.noel := 191
writedb
clear
$EOF
ファイル2では、以下のファイル1のこの部分のみが必要です。
$BQ
{ VOL @home }
database daba
relation tcdeatid
opendb
clear
.lruno := 72
.infno := 1
.tid.noel := 101
.lruno := 72
.infno := 205
.tid.noel := 191
.lruno := 72
.infno := 0
.tid.noel := 1111
.lruno := 72
.infno := 56
.tid.noel := 231
.lruno := 72
.infno := 45
.tid.noel := 61
.lruno := 72
.infno := 23
.tid.noel := 901
.lruno := 72
.infno := 123
.tid.noel := 1611
.lruno := 72
.infno := 786
.tid.noel := 81
.lruno := 72
.infno := 55
.tid.noel := 1
.lruno := 72
.infno := 253
.tid.noel := 121
writedb
clear
$EOF
file1のシェルコマンドを使用して、このコードブロック(lruno.:= 72)を別のファイルに入れたいと思います。ファイルを読み込み、lrunoの数を数えるコマンドが必要です。 := 72 in file1 で、その合計を別のファイルに書き込みます。
ベストアンサー1
sedを使う
.lruno := 72
その後、次から始まり、続く行を選択してclear
要求された出力を生成します。
$ sed -n '/.lruno := 72/,/clear/p' file
.lruno := 72
.infno := 1
.tid.noel := 101
.tid.info := 64
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
.lruno := 72
.infno := 205
.tid.noel := 101
.tid.info := 76
.tid.setnr := 1225
.typeidm := 1
.sourcetable := 2
writedb
clear
仕組み:-n
sedに要求しない限り印刷しないように指示します。で始まり終わる/.lruno := 72/,/clear/p
すべての範囲を印刷するように指示します。.lruno := 72
clear
awkを使う
awkを使用して同じアプローチを使用することもできます。
awk '/.lruno := 72/,/clear/' file
sedと同様に、で始まり/.lruno := 72/,/clear/
終わる行グループが選択されます。選択した行に指定されたジョブがないため、awkはそれを印刷する基本的な操作を実行します。.lruno := 72
clear