65

シェル スクリプトで awk を使用して呼び出したい C のプログラムがあります。どうすればこのようなことができますか?

4

8 に答える 8

32

いくつかの方法があります。

  1. awk にはsystem()、シェル コマンドを実行する関数があります。

    system("cmd")

  2. パイプに出力できます:

    print "blah" | "cmd"

  3. awk 構成コマンドを使用して、すべての出力をシェルにパイプできます。

    awk 'some script' | sh

于 2013-01-31T20:22:53.733 に答える
5

これと同じくらい簡単なものが機能します

awk 'BEGIN{system("echo hello")}'

awk 'BEGIN { system("date"); close("date")}'

于 2013-02-01T01:32:50.147 に答える
4

それは本当に依存します:)便利な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コメントで指摘されているように、より優れた移植性の高い代替手段です (ディスカッションとの優れたリンクが見つかります)。

于 2016-04-30T16:31:58.867 に答える