我得到了一个file.txt(文本文件),其中包含一串数据。示例内容:
loader
使用unix命令查找文件中存在的不同的“ N”重复模式(重复一次或多次)的数量。
即使尝试了一系列不同的命令,我也不确定要使用什么命令。
abcabccabbabNababbababaaaNNcacbba
abacabababaaNNNbacabaaccabbacacab
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
aaababababababacacacacccbababNbNa
abababbacababaaacccc
输出必须为6
答案 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