标签:
今天用awk来统计一个字符出现的次数,总是比实际多一个。查了半天才发现问题所在。
文本tt.txt如下:
<lst name="responseHeader"><int name="status">0</int><int name="QTime">14</int></lst><str name="defaultCoreName">collection1</str><lst name="initFailures"/><lst name="status"><lst name="PassRecord2014"><str name="name">PassRecord2014</str><bool name="isDefaultCore">false</bool><str name="instanceDir">/home/solr-4.5.0/example/solr/PassRecord2014/</str><str name="dataDir">/home/solr-4.5.0/example/solr/PassRecord2014/data/</str><str name="config">solrconfig.xml</str><str name="schema">schema.xml</str><date name="startTime">2015-04-01T06:28:15.07Z</date><long name="uptime">1239572</long><lst name="index"><int name="numDocs">164090656</int><int name="maxDoc">208295993</int><int name="deletedDocs">44205337</int><long name="version">261232</long><int name="segmentCount">34</int><bool name="current">true</bool><bool name="hasDeletions">true</bool><str name="directory">org.apache.lucene.store.NRTCachingDirectory:NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/home/solr-4.5.0/example/solr/PassRecord2014/data/index.20150203122351874 lockFactory=org.apache.lucene.store.NativeFSLockFactory@73cb4cae; maxCacheMB=48.0 maxMergeSizeMB=4.0)</str><lst name="userData"><str name="commitTimeMSec">1421846399426</str></lst><date name="lastModified">2015-01-21T13:19:59.426Z</date><long name="sizeInBytes">42172898452</long><str name="size">39.28 GB</str></lst></lst><lst name="PassRecord2014_00"><str name="name">PassRecord2014_00</str><bool name="isDefaultCore">false</bool><str name="instanceDir">/home/solr-4.5.0/example/solr/PassRecord2014_00/</str><str name="dataDir">/home/solr-4.5.0/example/solr/PassRecord2014_00/data/</str><str name="config">solrconfig.xml</str><str name="schema">schema.xml</str><date name="startTime">2015-04-01T06:28:16.268Z</date><long name="uptime">1238381</long><lst name="index"><int name="numDocs">175829855</int><int name="maxDoc">194278346</int><int name="deletedDocs">18448491</int><long name="version">149815</long><int name="segmentCount">33</int><bool name="current">true</bool><bool name="hasDeletions">true</bool><str name="directory">org.apache.lucene.store.NRTCachingDirectory:NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/home/solr-4.5.0/example/solr/PassRecord2014_00/data/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@36656758; maxCacheMB=48.0 maxMergeSizeMB=4.0)</str><lst name="userData"><str name="commitTimeMSec">1421898315939</str></lst><date name="lastModified">2015-01-22T03:45:15.939Z</date><long name="sizeInBytes">38838948011</long><str name="size">36.17 GB</str></lst></lst><lst name="PassRecord2014_01"><str name="name">PassRecord2014_01</str><bool name="isDefaultCore">false</bool><str name="instanceDir">/home/solr-4.5.0/example/solr/PassRecord2014_01/</str><str name="dataDir">/home/solr-4.5.0/example/solr/PassRecord2014_01/data/</str><str name="config">solrconfig.xml</str><str name="schema">schema.xml</str><date name="startTime">2015-04-01T06:28:15.07Z</date><long name="uptime">1239586</long><lst name="index"><int name="numDocs">134166331</int><int name="maxDoc">134166331</int><int name="deletedDocs">0</int><long name="version">96590</long><int name="segmentCount">1</int><bool name="current">true</bool><bool name="hasDeletions">false</bool><str name="directory">org.apache.lucene.store.NRTCachingDirectory:NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/home/solr-4.5.0/example/solr/PassRecord2014_01/data/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@1f98a654; maxCacheMB=48.0 maxMergeSizeMB=4.0)</str><lst name="userData"><str name="commitTimeMSec">1421809078062</str></lst><date name="lastModified">2015-01-21T02:57:58.062Z</date><long name="sizeInBytes">26719674923</long><str name="size">24.88 GB</str></lst></lst><lst name="collection1"><str name="name">collection1</str><bool name="isDefaultCore">true</bool><str name="instanceDir">/home/solr-4.5.0/example/solr/collection1/</str><str name="dataDir">/home/solr-4.5.0/example/solr/collection1/data/</str><str name="config">solrconfig.xml</str><str name="schema">schema.xml</str><date name="startTime">2015-04-01T06:28:15.07Z</date><long name="uptime">1239586</long><lst name="index"><int name="numDocs">0</int><int name="maxDoc">0</int><int name="deletedDocs">0</int><long name="version">1</long><int name="segmentCount">0</int><bool name="current">true</bool><bool name="hasDeletions">false</bool><str name="directory">org.apache.lucene.store.NRTCachingDirectory:NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/home/solr-4.5.0/example/solr/collection1/data/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@4e850e8c; maxCacheMB=48.0 maxMergeSizeMB=4.0)</str><lst name="userData"/><long name="sizeInBytes">65</long><str name="size">65 bytes</str></lst></lst></lst>
需要查找其中numDocs出现的此处,为此下了一条执行语句,发现怎么结果都多1.
如下:
cat t.txt |awk ‘BEGIN{c=0;} { for(i=0;i<NF;i++) if($i~/numDocs/)c++;} END{print c;}‘
后来将每一个匹配到的域,才发现$0不应该去做匹配的。。。。。
特别字符 |
说明 |
$ |
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n‘ 或‘\r‘。要匹配 $ 字符本身,请使用 \$。 |
( ) |
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。 |
* |
匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。 |
+ |
匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。 |
. |
匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。 |
[ ] |
标记一个中括号表达式的开始。要匹配 [,请使用 \[。 |
? |
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。 |
|
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n‘ 匹配字符‘n‘。‘\n‘ 匹配换行符。序列 ‘\\‘ 匹配 “\”,而 ‘\(‘ 则匹配 “(”。 |
^ |
匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。 |
{ } |
标记限定符表达式的开始。要匹配 {,请使用 \{。 |
| |
指明两项之间的一个选择。要匹配 |,请使用 \|。 |
用来在记录或者域内匹配正则表达式。如$ awk ‘$1 ~/^root/‘ test将显示test文件第一列中以root开头的行。
ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符
-F指定域分隔符为‘:‘,如:awk -F ‘:’
标签:
原文地址:http://www.cnblogs.com/dorothychai/p/4384040.html