如何用awk统计所有匹配的时间?

时间:2017-04-09 13:45:23

标签: awk

echo '#  x y z w  '| awk '/\w/{++cnt} END {print "Count = ", cnt}' 
1

如何输出4作为结果?
 x和y以及z和w,其中四个匹配模式 \ w 对于此处的字符串# x y z w,所有匹配的时间均为4。

1 个答案:

答案 0 :(得分:1)

您尝试做的事情是迭代所有字段并计算,或更改RS以便echo '# x y z w ' | awk -v RS=' +' '/\w/{++cnt} END {print "Count = ", cnt}' 为您执行此操作

echo '#  x y z w  ' | awk '{print "Count:", gsub(/\w/,"&")}' 

然而,一个更好的方法,可以逐行工作,用于多行输入

GNU

两者可能都是awk特定的,... | awk '{for(i=1;i<=NF;i++) if($i~/\w/) cnt++} END{print ...' 可能不支持,所以

    public static void main(String[] args) throws Exception {
        String xmlInputMsg =    "<state>\n" +
                                "    <appId>newID</appId>\n" +
                                "    <newDocuments>\n" +
                                "        <nameValues>\n" +
                                "            <name>test1</name>\n" +
                                "            <value>123456</value>\n" +
                                "        </nameValues>\n" +
                                "        <nameValues>\n" +
                                "            <name>test2</name>\n" +
                                "            <value>987654</value>\n" +
                                "        </nameValues>\n" +
                                "    </newDocuments>\n" +
                                "    <oldDocument>\n" +
                                "        <oldAppId>true</oldAppId>\n" +
                                "        <name>App</name>\n" +
                                "        <source>NA</source>\n" +
                                "    </oldDocument>\n" +
                                "</state>";
    String result = null;
    XMLSerializer xmlSerializer = new XMLSerializer();
    xmlSerializer.setForceTopLevelObject(true);
    result = XMLSerializer.class.toGenericString();     
    System.out.println(result);
}