计算模式在文件中出现的时间

时间:2016-08-12 03:53:27

标签: python awk

这是我的档案:

$ cat file
some pile of text
or other
<!-- Footer part at bottom of page-->
<div id="footer">
   <div class="row col-md-2 col-md-offset-5">

    <p class="text-muted">&copy; 2014. Core Team</p>
  </div>

    <div id="downloadlinks">
    <!-- downloadlinks go here-->
    </div>
</div>
and more maybe.

这是我想要匹配的模式:

$ cat old
<!-- Footer part at bottom of page-->
<div id="footer">
   <div class="row col-md-2 col-md-offset-5">

    <p class="text-muted">&copy; 2014. Core Team</p>
  </div>

    <div id="downloadlinks">
    <!-- downloadlinks go here-->
    </div>
</div>

我想看看文件中的模式在其他文件中发生了多少次(* .html)。我希望使用awk和/或python来做到这一点。

所以例如在这里给出这个1文件的答案就是:1(我可能必须在每次迭代时使用for循环和awk)

awk ... file
1

2 个答案:

答案 0 :(得分:2)

with open('file.txt', 'r') as myfile:
    data=myfile.read().replace('\n', '')
with open('old.txt', 'r') as myfile:
    search=myfile.read().replace('\n', '')

print data.count(search)

答案 1 :(得分:1)

使用GNU awk进行多字符RS:

awk -v RS='^$' 'NR==FNR{RS=$0} END{print (FNR && (RT=="") ? FNR-1 : FNR)}' old file

上面一次完全按原样读取old的全部内容,并使用该字符串填充RS,然后再转到阅读fileFNR块中的END表示RS中存在的file个已终止字符串的数量。如果file的结尾没有以RS结尾,那么在RS的最后一次出现后,文件中将会有一个字符串,而RT将是空字符串。在这种情况下,如果FNR非零,则减去1以获得所见的RS的数量。您需要检查非零FNR以避免为空文件打印-1

所以在文件末尾如果FNR!= 0那么文件不是空的那么你需要检查文件是否以RS结尾(在这种情况下RT将是非空的)或不是(其中case RT将为null)。如果确实如此,那么看到的RS的数量是FNR,否则它是FNR-1。如果FNR == 0则文件为空,因此您要打印一个零的计数。