如何解决如何计算Bash中跨行出现的连续模式的数量?
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
CACTGCTGTCACCCTCCATGCACCTGCCCACCCTCCAAGGATCNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNGgtgtgtatatatcatgtgtgatgtgtggtgtgtg
gggttagggttagggttaNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNAGaggcatattgatctgttgttttattttcttacag
ttgtggtgtgtggtgNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
预期结果为4
,因为有4
组N
我尝试了grep -Eozc 'N+'
,但结果是1
如果可能的话,我希望也能显示N
的行号和长度
解决方法
awk '$1=$1' FS='' OFS='\n' file | uniq -c | grep -c N
或
tr -d '\r\n' < file | grep -o 'N*' | grep -c .
输出:
4,
以纯色bash方式,无需使用任何外部命令:
const Degree = require('../models/index.js').Degree;
const Teachers = require('../models/index.js').Teachers;
exports.index = (req,res) => {
Degree.findAll({
include: Teachers,order: [
['degreeId','DESC']
]
}).then(results => {
if (results.length > 0) {
res.status(200).json({
'error': false,'status': 200,'data': results
});
res.end();
} else {
res.status(200).json({
'error': false,'message': 'No records available'
});
res.end();
}
}).catch(err => {
console.log(err);
res.status(500).json({
'error': true,'status': 500,'message': 'Internal Server Error'
});
});
};
输出:
v=$(<file)X
v=${v//[[:space:]]}
v=${v//N[^N]/ }
v=${v//[^ ]}
echo ${#v}
,
有点长,但是很简单:
< tmp.txt \
tr -d '\n' | # Strip newlines
tr -s N | # Collapse strings of Ns to a single N
tr -dC N | # Strip anything that *isn't* an N
wc -c # Count the resulting Ns
单线:
< tmp.txt tr -d '\n' | tr -s N | tr -dC N | wc -c
,
从Bash调用Ruby One-Liner
无论是从文件还是从标准输入中读取,您都可以将其作为Bash的Ruby单一代码来进行。例如:
$ ruby -e 'puts ARGF.read.delete("\n").scan(/N+/).count' example.txt
4
$ ruby -e 'puts ARGF.read.delete("\n").scan(/N+/).count' <<< "$str"
4
此概念是将整个文件包含在内,删除所有换行符,然后计算连续的N
个字符的组。
注意:如果要忽略孤立的N,则只需扫描/N{2,}/
。那只会计算两个或更多N
字符的运行。
假设您的数据位于名为test.txt
的文件中:
- 我们从中读取所有数据。
- 显示与我们的模式匹配的行(以
N
开头和结尾,并且仅包含N
) - 计数行数
这是执行此操作的代码:
cat test.txt | egrep -oe "^N*$" | wc -l
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。