開始一致がある場合にのみ終了一致を印刷します。

開始一致がある場合にのみ終了一致を印刷します。

次のファイルがありますawk。問題は、一致する行$0 ~ end_ereが印刷される場合です。しかし、私が望むのは、以前の一致がある場合にのみその行を印刷することです$0 ~ beg_ere。どうですか?

beg_ereセクションの先頭に一致し、 end_ereセクションの最後に一致します。

pn_ere行の先頭からコメント文字を削除します。

trueの場合、 showpr一致する行が印刷されます。それ以外の場合は、ハッチ内の線だけが印刷されます(合計に一致する線は印刷されないことを意味します)。beg_ereend_erebeg_ereend_ere

$0 ~ beg_ere {
   display = 1
   if ( ! showpr ) { next }
 }

$0 ~ end_ere {
   if (( display == 1 )); then
     if ( ! showpr ) { print "" }
     else { sub(pn_ere, "") ; print ; print "" }
   fi
   display = 0
 }

display { sub(pn_ere, "") ; print }

ベストアンサー1

あなたの説明によると、あなたが望む仕事は次のとおりです。

$0 ~ beg_ere {
    inBlock = 1
}

inBlock {
    lines[++numLines] = $0
    if ( $0 ~ end_ere ) {
        delta = ( showpwr ? 0 : 1 )
        for ( lineNr=(1+delta); lineNr<=(numLines-delta); lineNr++ ) {
            sub(pn_ere, "", lines[lineNr])
            print lines[lineNr]
        }
        inBlock = numLines = 0
    }
}

ただし、質問にサンプル入力/出力を提供しておらず、質問のコードを実行できる最小限の完全なスクリプトではないため、明らかにテストすることはできません。

おすすめ記事