解析每个字段并使用'awk'/'gawk'处理它

时间:2009-02-22 03:53:45

标签: unix awk

这是一个查询:

grep bar 'foo.txt' | awk '{print $3}'

'awk'查询发出的字段名称是受损的C ++符号名称。我想将每个传递给dem并最终输出'dem'的输出 - 即解码符号。

假设字段分隔符是''(空格)。

3 个答案:

答案 0 :(得分:3)

awk是一种模式匹配语言。 grep完全没必要。

awk '/bar/{print $3}' foot.txt

做你的例子。

编辑在阅读前面答案的评论后修了一下(我不知道有关dem的事情......):

您可以在awk中使用system调用,例如:

awk '/bar/{cline="dem " $3; system(cline)}' foot.txt

但是这会为处理的每个符号生成dem的实例。非常低效。

所以让我们更聪明:

awk '/bar/{list = list " " $3;}END{cline="dem " list; system(cline)}' foot.txt

BTW - 未经测试,因为我没有dem或您的输入。


另一个想法:如果你打算使用其他海报提供的xargs公式,cut可能比awk更有效率。但是,此时您需要再次grep

答案 1 :(得分:1)

怎么样

grep bar 'foo.txt' | awk '{ print $3 }' | xargs dem | awk '{ print $3 }'

答案 2 :(得分:1)

这将打印demangled符号,在方法的情况下用参数列表完成:

awk '/bar/ { print $3 }' foo.txt | xargs dem | sed -e 's:.* == ::'

在方法的情况下,这将打印出消除符号,不带参数列表:

awk '/bar/ { print $3 }' foo.txt | xargs dem | sed -e 's:.* == \([^(]*\).*:\1:'

干杯, 诉