在文本文件中找到字母“ N”或其重复(例如:“ NNNNN”)多少次?

时间:2019-09-23 12:06:17

标签: shell unix grep

我得到了一个file.txt(文本文件),其中包含一串数据。示例内容:

loader

使用unix命令查找文件中存在的不同的“ N”重复模式(重复一次或多次)的数量。

即使尝试了一系列不同的命令,我也不确定要使用什么命令。

abcabccabbabNababbababaaaNNcacbba                                                              
abacabababaaNNNbacabaaccabbacacab                                                   
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN                                                    
aaababababababacacacacccbababNbNa                                                     
abababbacababaaacccc         

输出必须为6

4 个答案:

答案 0 :(得分:3)

一种方法:

$ sed 's/[^N]\{1,\}/\n/g' file.txt | grep -c N
6

工作原理:

  • 用换行符替换输入中一个或多个非N字符的所有序列。 这样会将类似abcabccabbabNababbababaaaNNcacbba的字符串转换为

    N

    NN

  • 计算至少包含N的行数(忽略空行)。


无正则表达式的替代项:

$ tr -sc N ' ' < file.txt | wc -w
6

使用tr用一个空格替换所有非N字符的行,并计算剩余的单词(其中N个序列)。甚至不需要-s选项。

答案 1 :(得分:3)

使用GNU awk(好吧,刚刚对gawk,mawk,busybox awk和awk版本20121220进行了测试,并且似乎可以与所有这些一起使用):

$ gawk -v RS="^$" -F"N+" '{print NF-1}' file
6

它以单个记录的形式读取整个文件,使用正则表达式N+作为字段分隔符,并输出减去一的字段计数。对于其他awk:

$ awk -v RS="" -F"N+" '{c+=NF-1}END{print c}' file

它以空行分隔的记录,计数和求和字段块读取。

答案 2 :(得分:1)

这里是awk,应该在大多数系统上都可以使用。

awk -F'N+' '{a+=NF-1} END {print a}' file
6

它将行除以一个或多个N,然后计算字段数-1 pr行。

答案 3 :(得分:0)

如果您有一个文本文件,并且要计算N字母序列出现的次数,则可以执行以下操作:

loading

但是,这将区分分成多行的序列。示例:

awk '{a+=gsub(/N+/,"")}END{print a}' file

如果要将其计为单个序列,则应执行以下操作:

abcNNN
NNefg