シェル スクリプトで awk を使用して呼び出したい C のプログラムがあります。どうすればこのようなことができますか?
8 に答える
いくつかの方法があります。
awk には
system()
、シェル コマンドを実行する関数があります。system("cmd")
パイプに出力できます:
print "blah" | "cmd"
awk 構成コマンドを使用して、すべての出力をシェルにパイプできます。
awk 'some script' | sh
これと同じくらい簡単なものが機能します
awk 'BEGIN{system("echo hello")}'
と
awk 'BEGIN { system("date"); close("date")}'
それは本当に依存します:)便利なLinuxコアのutils(info coreutils
)の1つはxargs
. 使用している場合はawk
、おそらくより複雑なユースケースを念頭に置いているでしょう-あなたの質問はあまり詳細ではありません.
printf "1 2\n3 4" | awk '{ print $2 }' | xargs touch
を実行しtouch 2 4
ます。ここtouch
はあなたのプログラムに置き換えることができます。詳細については、info xargs
および を参照してくださいman xargs
(実際には、これらをお読みください)。touch
あなたのプログラムに置き換えたいと思います。
前述のスクリプトの内訳:
printf "1 2\n3 4"
# Output:
1 2
3 4
# The pipe (|) makes the output of the left command the input of
# the right command (simplified)
printf "1 2\n3 4" | awk '{ print $2 }'
# Output (of the awk command):
2
4
# xargs will execute a command with arguments. The arguments
# are made up taking the input to xargs (in this case the output
# of the awk command, which is "2 4".
printf "1 2\n3 4" | awk '{ print $2 }' | xargs touch
# No output, but executes: `touch 2 4` which will create (or update
# timestamp if the files already exist) files with the name "2" and "4"
更新元の回答では、のecho
代わりに使用しましたprintf
。ただし、printf
コメントで指摘されているように、より優れた移植性の高い代替手段です (ディスカッションとの優れたリンクが見つかります)。