awkで^#$をレコード区切り文字として使用するには?

awkで^#$をレコード区切り文字として使用するには?

#文字自体を1行のレコード区切り文字として使用するようにawkにどのように通知できますか?問題は、行の始まりではなくファイルの始まりと一致するRS="^#$"ため、そうは言えず、行の先頭にない文字と一致するために機能しないことです。^RS="#\n"#

$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'

次に、次のコマンドを使用して各レコードの最初のフィールドを印刷しますRS="#\n"

$ printf "%s" "$data" | awk '
  BEGIN { RS="#\n"; FS="\n" }
  /./ {print $1}
  '
first record, first field
second record, first field
second record, second field

最後の行は最初のフィールドではなく2番目のフィールドなので、間違っています。予想される出力は次のとおりです。

first record, first field
second record, first field#

答え1

これを行う1つの方法は次のとおりですawk

$ printf "%s\n" "$data" | 
    awk -F'\n' -v RS='(^|\n)#\n' '/./ {print $1}' 
first record, first field
second record, first field#

秘密は、レコード区切り文字を次に設定することです。誰でもファイルの先頭(^)または改行文字の後に#別の改行文字が続きます\n


関連情報