echo '# x y z w '| awk '/\w/{++cnt} END {print "Count = ", cnt}'
1
如何输出4作为结果?
x和y以及z和w,其中四个匹配模式 \ w
对于此处的字符串# x y z w
,所有匹配的时间均为4。
答案 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);
}