2017-03-22 101 views
-1

我在寻找简洁的Perl当量(以脚本而不是单行中使用),有几件事我会在bash/awk的,否则做拆分具体线路:匹配,并从一个.txt文件

Count=$(awk '/reads/ && ! seen {print $1; seen=1}' < input.txt) 

这通过包含线,包括一些在这个格式的许多规定.txt文件拖网:

8523723 reads; of these: 
1256265 reads; of these: 
2418091 reads; of these: 

打印“8523723”,而忽略了可匹配线的其余部分(我只希望采取行动在第一个匹配的实例上)。

其次:

Count2=$(awk '/paired/ {sum+=$1} END{print sum}' < input.txt) 

25 paired; of these: 
15 paired; of these: 

这将创建运行总计在每个匹配线数的,在打印40.

+0

是否要删除第一点上的重复项。第二点,计算重复的行数。我可以对。 – ssr1012

+0

本质上,是的。 (1)从匹配的第一行中取出数字,忽略所有其他匹配的行(2)匹配所有行并将数字相加在一起 – AnnaSchumann

+1

尝试'perl -nE'/ reads/&& do {print; exit}'input.txt'和'perl -nE'/ paired/&& $ sum ++; END {say $ sum}'input.txt' –

回答

1

第一个是:

while (<>) { 
    if (/reads/) { 
    print; 
    last; 
    } 
} 

第二个是:

my $total = 0; 
while (<>) { 
    if (/(\d+) paired/) { 
    $total += $1; 
    } 
} 
say $total; 

毫无疑问,你可以打高尔夫球。但是这些版本是可读的:-)

相关问题