【问题标题】:count pattern occurrence per line每行计数模式出现次数
【发布时间】:2014-03-12 22:26:19
【问题描述】:

所需的输出为每一行保留前两个“列”,并在同一行上添加“单词”的出现次数。

输入:

string1 string2 aaaaaaaaa word aaaaaaaa word  
string3 string4 ccccccccccc word dddaaaaaaacccd word dddddaaaaa word bbbb  
string5 string6 aaaa word bbbbbbaddd word aaaaa word ccccccdddddddddd word cccccc

期望的输出:

string1 string2 2  
string3 string4 3  
string5 string6 4

有什么建议吗?

【问题讨论】:

  • 如果第 1 行是 string1 string2 aawordaaa word aaaaaaaa word,那么该行的输出计数是 2 还是 3?如果word 作为 string1 或 string2 的一部分出现怎么办?

标签: regex unix sed awk


【解决方案1】:

使用 awk

awk '{print $1,$2,gsub(/word/,"")}' file
string1 string2 2
string3 string4 3
string5 string6 4

说明

  • gsub() 函数返回进行的替换次数。

【讨论】:

  • +1 非常聪明!您可能想使用/\<word\>/ 来确保它不计算包含单词的单词。
  • 不错且简单的方法。
  • 谢谢!这种“gsub”方法确实是一种简单有效的解决方案!
【解决方案2】:

我忽略了,下面是使用 awk 的方法:

awk '{count=0; 
      for(i=3; i <= NF; i++) {if($i=="word") { count++ }}; 
      print $1, $2, count; }' inputfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多