awkのprint / printf出力をシェルコマンドにパイプして、そのステートメントが関連していない他のすべてのprint / printfステートメントの後に実行されるようにします。

awkのprint / printf出力をシェルコマンドにパイプして、そのステートメントが関連していない他のすべてのprint / printfステートメントの後に実行されるようにします。

このawkスクリプトが与えられたら:

END  {
print "Y" | "cat" 

print "X"
print "X"
}

# Output: 
# X
# X
# Y

Yは他のステートメントよりも先に実行する必要があるので、Yを最初に印刷するのはどうですか?

ベストアンサー1

cat■前にプロセスを終了してY印刷するには、sの後に呼び出すだけXです。close("cat")print "Y" | "cat"

残りの部分はマンページに記載されているので、読むことをお勧めします。

Yは他のステートメントよりも先に実行する必要があるので、Yを最初に印刷するのはどうですか?

catその出力は、他のステートメントの前に作成または終了しないでください。呼び出し前、呼び出し後、または呼び出しの間に出力を書き込むことができますprint "X"

print ... | "command ..."awkでこのようなものを使用すると、標準command ..入力はパイプに接続された非同期プロセスで始まり(を通じて popen("command ...", "w"))プロセスは必ずしも終了せず、出力を呼び出して書き込む前にclose("command ...")(またはawkが式を終了するときに暗黙的に)完全です。

次の例をご覧ください。

BEGIN {
   print "foo" | "cat > file"
   print "bar" | "cat > file"
}

結果にはfile2行が含まれ、fooコマンドbarcat > file各行に対して個別に実行されません。

おすすめ記事