Go to the first, previous, next, last section, table of contents.

出力をファイルやパイプにリダイレクトする

以下に、出力リダイレクションの形式を3つ示します。すべてprint文で示されていますが、printf文でも同様に動作します。

print items > output-file
この形式のリダイレクションでは、項目は出力ファイルoutput-fileに出力されます。ファイル名output-fileは式でもかまいません。その値は文字列に変えられて、ファイル名として使われます(see section アクション:式)。 この形式のリダイレクションが使われた場合、output-fileは最初の出力がoutput-fileに書き込まれる前に削除されます。それ以降の書き込みの場合は、output-fileは削除されるのではなく、output-fileにアペンドされます。output-fileが存在しない場合は、新たに作成されます。 たとえば次の例は、1つのawkプログラムでBBS名の一覧をファイル`name-list'に書き込み、電話番号の一覧をファイル`phone-list'に書き込む方法を示しています。どちらの出力ファイルも、1行にBBS名が1つ、または電話番号が1つ書き込まれます。
awk '{ print $2 > "phone-list"
       print $1 > "name-list" }' BBS-list
print items >> output-file
この形式のリダイレクションでは、項目は出力ファイルoutput-fileに出力されます。`>'が1つのリダイレクションとの違いは、output-fileの古い内容(存在する場合)は消去されず、awkの出力はそのファイルにアペンドされることです。
print items | command
出力は、ファイルにではなく、パイプに送ることもできます。この形式のリダイレクションでは、パイプをcommandに対してオープンし、itemsの値をこのパイプに書き込み、commandを実行するために生成された別のプロセスに送ります。 リダイレクションの引数commandは実際にはawkの式です。その値は、実行されるシェルコマンドを与える文字列に変換されます。 たとえば、次の例は、2つのファイルを出力します。1つはソートされていないBBS名のリスト、もう1つは逆アルファベット順にソートされたBBS名のリストです。
awk '{ print $1 > "names.unsorted"
       print $1 | "sort -r > names.sorted" }' BBS-list
ソートされないリストは通常のリダイレクションで書き込まれますが、ソートされるリストはsortユーティリティにパイプされて書き込まれます。 次に、リダイレクションを使ってメッセージをメールリスト`bug-system'にメールする例を示します。これは、システムのメインテナンスのために定期的に実行されているawkスクリプトで、トラブルが発生した場合に便利です。
print "Awk script failed:", $0 | "mail bug-system"
print "at record number", FNR, "of", FILENAME  | "mail bug-system"
close("mail bug-system")
ここではclose関数を呼び出していますが、これは必要な出力がパイプにすべて送られたあと、すぐにパイプをクローズしたほうが良いからです。詳細については、See section 出力ファイルとパイプのクローズ

`>'`>>'`|'で出力をリダイレクトすると、指定した特定のfilecommandに、プログラムによる書き込みが行われていない場合のみ、システムに対してファイルやパイプのオープン要求が出されます。


Go to the first, previous, next, last section, table of contents.