#
文字自体を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
。