awkでシェルコマンドを実行したいです。シェルコマンドは通常、stdinを使用してstdoutに書き込みます。
print to_sort | "sort"
"sort" | getline
動作しません(入力を待っている2行目でソート)
print to_sort | "sort" | getline
文法エラーです。
答え1
GNUは知っています。共同プロセスこれは可能です。このマニュアルでは、実行中の操作が機能しない理由も説明しています。パイプラインで使用される2つのコマンドは、同じコマンドラインを使用して開始されたにもかかわらず、異なるサブプロセスです。同じサブプロセスから入力と出力を取得するには、|&
両方のパイプで使用します。
awk 'BEGIN {com = "cat -n"} {print |& com; com |& getline; print}'
しかし、これは生産をしていないsort
ので実際には役に立ちません。sort
どの入力にEOFが表示されるまで出力します。
このようなコマンドの場合は、まずすべての出力を提供し、coprocessパイプの書き込み端を閉じてから読み取りを開始する必要があります。例えば
awk 'BEGIN {com="sort"} {print |& com} END { print "---"; close(com, "to"); while(com |& getline) print }'