データベースの中には、1つのエントリにすべての情報が都合良く1行に収まってないものがあります。このような場合は、複数行レコードを使います。
複数行レコードを使うには、まず最初にデータ形式を選択しなければなりません。レコードが1行として定義されていない場合、レコードをどのように定義したいですか? 何でレコードを区切ればいいでしょうか?
1つには、一般には使われない文字または文字列を使ってレコードを区切る方法があります。たとえば、フォームフィード文字(awkではCと同じように`\f'です)でレコードを区切り、各レコードを1ページにすることです。これには、変数RSを"\f"(フォームフィード文字を含んだ文字列)に設定します。レコード中のデータの一部でない限り、他の文字も同様に使えます。
もう1つは、空行でレコードを区切る方法です。特例として、RSの値としてのヌル文字列は、レコードが1行以上の空行で区切られることを意味します。RSをヌル文字列に設定すると、レコードは常に最初に出現する空行で終了します。そして、次のレコードは次の非空行まで始まりません --- 空行が続けて現れても、1つのレコードセパレータと解釈されます。
次に、レコード内のフィールドを区切らなければなりません。1つの方法は、各フィールドを別々の行にすることです。これには、変数FSを文字列"\n"に設定してください(この簡単な正規表現はニューラインひとつにマッチします)。
もう1つの方法は、各行を通常の方法でフィールドに分けることです。これは、たまたま特例としてデフォルトでこのようになります。つまり、RSがヌル文字列に設定されている場合、FSに設定されているフィールドセパレータに加えて、ニューライン文字が常にフィールドセパレータとして機能します。
このような特例を設けたのは、おそらくデフォルトだけで便利な動作にするためでしょう(たとえばFS==" ")。しかし、ニューライン文字でフィールドを区切りたくない場合は、この機能は問題になります。これを避ける方法がないのです。しかし、split関数でレコードを1つ1つ分解すれば実現できます(see section 文字列操作のための組み込み関数)。