perl - 如何使用 Perl 中的循环计算部分文本文件中的元素数量?
问题描述
我正在寻找一种在 Perl 中创建脚本来计算我的文本文件中的元素并分段执行的方法。例如,我的文本文件有这种形式:
ID Position Potential Jury agreement NGlyc result
(PART 1)
NP_073551.1_HCoV229Egp2 23 NTSY 0.5990 (8/9) +
NP_073551.1_HCoV229Egp2 62 NTSS 0.7076 (9/9) ++
NP_073551.1_HCoV229Egp2 171 NTTI 0.5743 (5/9) +
...
(PART 2)
QJY77946.1_NA 20 NGTN 0.7514 (9/9) +++
QJY77946.1_NA 23 NTSH 0.5368 (5/9) +
QJY77946.1_NA 51 NFSF 0.7120 (9/9) ++
QJY77946.1_NA 62 NTSS 0.6947 (9/9) ++
...
(PART 3)
QJY77954.1_NA 20 NGTN 0.7694 (9/9) +++
QJY77954.1_NA 23 NTSH 0.5398 (5/9) +
QJY77954.1_NA 51 NFSF 0.7121 (9/9) ++
...
(PART N°...)
就像您可以看到每个部分的 ID 相同(一个用于 PART 1,另一个用于 PART 2,然后......)。更改只能在位置//潜在//陪审团协议//NGlyc 结果列中看到然后,我的主要目标是计算潜在 0,7 >= 的行。
考虑到这一点,我正在寻找这样的输出:
Part 1:
1 (one value 0.7 >=)
Part 2:
2 (two values 0.7 >=)
Part 3:
2 (two values 0.7 >=)
Part N°:
X numbers of values 0.7 >=
此输出告诉我每个 ID的正值数(0.7 >=)。
我相信的伪代码是这样的:
foreach ID in LIST
foreach LINE in FILE
if (ID is in LINE)
... count the line ...
end foreach LINE
end foreach ID
我正在寻找任何建议(关于包或脚本的想法)或评论以创建更好的脚本。
谢谢!最好的!
解决方案
要计算每个部分与特定列上的某些条件匹配的行数,您可以循环遍历这些行,跳过标题,解析部分编号,然后使用数组来计算每个部分匹配的行数部分。
在此之后,您可以遍历数组中记录的计数并以您的特定格式打印出来。
#!/usr/bin/perl
use strict;
use warnings;
my $part = 0;
my @cnt_part;
while(my $line = <STDIN>) {
if($. == 1) {
next;
}elsif($line =~ m{^\(PART (\d+)\)}) {
$part = $1;
}else {
my @cols = split(m{\s+},$line);
if(@cols == 6) {
my $potential = $cols[3];
if(0.7 <= $potential) {
$cnt_part[$part]++;
};
};
};
};
for(my $i=1;$i<=$#cnt_part;$i++){
print "Part $i:\n";
print "$cnt_part[$i] (values 0.7 <=)\n";
};
要运行它,只需通过 Perl 脚本通过管道传输整个文件:
cat in.txt | perl count.pl
你会得到这样的输出:
Part 1:
1 (values 0.7 <=)
Part 2:
2 (values 0.7 <=)
Part 3:
2 (values 0.7 <=)
如果您还想将计数显示为单词,您可以使用Lingua::EN::Numbers
(请参阅此程序)并获得与您帖子中的输出非常相似的输出:
Part 1:
1 (one values 0.7 <=)
Part 2:
2 (two values 0.7 <=)
Part 3:
2 (two values 0.7 <=)
这篇文章中的所有代码也可以在这里找到。
推荐阅读
- node.js - Angular Typescript 数组仅在 array.push() 上添加最后一个元素
- react-native - react native如何将项目版本0.61.0升级到最新版本
- android-studio - E/RecyclerView:没有附加适配器;跳过布局 / Kotlin
- python - 一次导入多个自定义模块
- android - 它的名称是什么以及如何在 xml 中对其进行编码?
- intellij-plugin - 行为类似于断点的 IntelliJ 行标记?
- windows - Windows Makefile 和 TEXINPUTS
- python-3.x - Python3 argparse nargs="+" 获取参数数量
- python - 从循环更新值时,字典似乎有点偏离和缺失值
- google-analytics - 我可以将我的 Google Analytics(分析)媒体资源从 GA4 切换到 UA 吗?