AWK-出力リダイレクト
これまで、標準出力ストリームにデータを表示してきました。データをファイルにリダイレクトすることもできます。リダイレクトは、print または printfステートメント。AWKでのリダイレクトは、AWKプログラム内で記述されることを除いて、シェルコマンドでのリダイレクトと同じように記述されます。この章では、適切な例を使用してリダイレクトについて説明します。
リダイレクト演算子
リダイレクト演算子の構文は次のとおりです。
構文
print DATA > output-file
データをに書き込みます output-file。出力ファイルが存在しない場合は、作成されます。このタイプのリダイレクトを使用すると、最初の出力が書き込まれる前に出力ファイルが消去されます。同じ出力ファイルへの後続の書き込み操作は、出力ファイルを消去しませんが、それに追加します。たとえば、次の例は次のように書き込みますHello, World !!! ファイルに。
いくつかのテキストデータを含むファイルを作成しましょう。
例
[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt
このコードを実行すると、次の結果が得られます-
出力
Old data
ここで、AWKのリダイレクト演算子を使用してコンテンツをリダイレクトしましょう。
例
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt
このコードを実行すると、次の結果が得られます-
出力
Hello, World !!!
追加演算子
追加演算子の構文は次のとおりです-
構文
print DATA >> output-file
データをに追加します output-file。出力ファイルが存在しない場合は、作成されます。このタイプのリダイレクトを使用すると、ファイルの最後に新しいコンテンツが追加されます。たとえば、次の例は追加しますHello, World !!! ファイルに。
いくつかのテキストデータを含むファイルを作成しましょう。
例
[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt
このコードを実行すると、次の結果が得られます-
出力
Old data
ここで、AWKの追加演算子を使用していくつかのコンテンツを追加しましょう。
例
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt
このコードを実行すると、次の結果が得られます-
出力
Old data
Hello, World !!!
パイプ
ファイルを使用する代わりに、パイプを介して別のプログラムに出力を送信することができます。このリダイレクトにより、コマンドへのパイプが開き、このパイプを介してアイテムの値が別のプロセスに書き込まれ、コマンドが実行されます。リダイレクション引数コマンドは、実際にはAWK式です。パイプの構文は次のとおりです-
構文
print items | command
使用しましょう tr 小文字を大文字に変換するコマンド。
例
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
このコードを実行すると、次の結果が得られます-
出力
HELLO, WORLD !!!
双方向通信
AWKはを使用して外部プロセスと通信できます |&、これは双方向通信です。たとえば、次の例ではtr小文字を大文字に変換するコマンド。私たちのcommand.awk ファイルに含まれる-
例
BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}
このコードを実行すると、次の結果が得られます-
出力
HELLO, WORLD !!!
スクリプトは不可解に見えますか?それをわかりやすく説明しましょう。
最初のステートメント、 cmd = "tr [a-z] [A-Z]"、は、AWKからの双方向通信を確立するためのコマンドです。
次のステートメント、つまりprintコマンドは、 trコマンド。ここに&| 双方向通信を示します。
3番目のステートメント、すなわち、 close(cmd, "to")、を閉じます to その実行を競合した後のプロセス。
次のステートメント cmd |& getline out を保存します output getline関数を使用して変数を出力します。
次のprintステートメントは出力を出力し、最後に close 関数はコマンドを閉じます。