クエリは次のとおりです。
grep bar 'foo.txt' | awk '{print $3}'
「awk」クエリによって出力されるフィールド名は、マングルされた C++ シンボル名です。それぞれをdemに渡し、最終的に「dem」の出力、つまりデマングルされたシンボルを出力したいと思います。
フィールド区切り文字が ' ' (スペース) であると想定します。
awk
パターンマッチング言語です。はgrep
まったく不要です。
awk '/bar/{print $3}' foot.txt
あなたの例がすることをします。
編集前の回答のコメントを読んだ後、少し修正しました(私は何も知りませんdem
...):
system
次のような方法で awkの呼び出しを利用できます。
awk '/bar/{cline="dem " $3; system(cline)}' foot.txt
dem
しかし、これは処理されたシンボルごとに のインスタンスを生成します。非常に非効率的です。
それでは、もっと賢くなりましょう。
awk '/bar/{list = list " " $3;}END{cline="dem " list; system(cline)}' foot.txt
ところで- 私が持っていないdem
か、あなたの入力がないので、テストされていません。
別の考え:xargs
他のポスターが提供する定式化を使用する場合は、cut
より効率的である可能性がありますawk
。ただし、その時点で、grep
もう一度必要になります。
これにより、デマングルされたシンボルが出力され、メソッドの場合は引数リストが完成します。
awk '/bar/ { print $3 }' foo.txt | xargs dem | sed -e 's:.* == ::'
これにより、メソッドの場合は引数リストなしで、デマングルされたシンボルが出力されます。
awk '/bar/ { print $3 }' foo.txt | xargs dem | sed -e 's:.* == \([^(]*\).*:\1:'
乾杯、V.
どうですか
grep bar 'foo.txt' | awk '{ print $3 }' | xargs dem | awk '{ print $3 }'