perl - 如何从特定行收集字符串
问题描述
我正在使用其他人的 Perl 代码,并且想从第 2 行而不是第 1 行中提取字符串。
以下格式的 4 行重复构成要处理的文件:
@HWI-M02096:147:000000000-AFU9U:1:1101:15747:1825 1:N:0:CGTACTAGCTCTCT
CTACAGCAGAGAGTGTTTAGGAAGCACCTTTTCGTTAGGCAGATTT
+
3>AAAFFFFC?FGFGGGGGGGGHHHHHHHHHHHGHHGGHHBEFHHH
我的理解是 substr 偏移了 $barcodeLen 并记录了第 1 行给出的 $UMIlen 长度的字符串。这被写入一个文件,输出第 1 行在“1825”和“1:N:0”之间的空格处拆分,后跟记录的字符串 例如:@HWI-M02096:147:000000000-AFU9U:1:1101:15747:1825 TCTCT
my $seqdir = $ARGV[0];
my $barcodeLen = $ARGV[1];
my $UMIlen = $ARGV[2];
my @seqfiles = <$seqdir/*>;
foreach my $file (sort@seqfiles) {
getUmi($file);
}
sub getUmi
{
my $seqfile = shift;
open(INFILE, "$seqfile") || die("Cannot open file $seqfile $!\n");
my @temp = split(/\//,$seqfile);
my $outfile = $temp[length(@temp)];
my $outfile1 = "UMI-" . $outfile;
my ($line, @line, $umi, $firstbps, $seqlen);
open(OUTFILE1, ">$outfile1") || die("Cannot open file $outfile1
$!\n");
my $i =0;
while (<INFILE>)
{
$line = $_;
chomp $line;
$i++;
if ($i % 4 ==1)
{
@line = split(" ", $line);
@temp = $line[1];
### extract umi
$umi = substr($temp[scalar @temp - 1],$barcodeLen,
$UMIlen);
print OUTFILE1 "$line[0]\t$umi\n";
}
}
close(INFILE);
close(OUTFILE1);
}
我无法理解 @temp 数组和 $line 变量如何用于生成示例输出。我想生成相同类型的输出,而是从第 1 行“@HWI-M02096:14 ...”收集标题信息,但从第 2 行收集一个字符串。任何帮助将不胜感激。
解决方案
推荐阅读
- google-apps-script - 用于设置形状颜色的 Google Apps 脚本
- oracle - PL/SQL XML 解构:XVM-01081:[XPST0081] 无效前缀
- react-bootstrap - 如何使用反应引导下拉菜单实现自定义下拉切换状态
- python - 修复混淆矩阵图线
- java - Mockito when() 方法不起作用并获取空指针异常
- java - Android ProGuard 中的 NoSuchFieldException
- paypal - PayPal Checkout:无法在印度境内进行美元付款
- reactjs - 如何确保我的用户通过 React-Router-Dom 转到特定路径(写在 url 中)而不自动转到默认主页?
- ios - 如何使用 addObserver 激活通知
- typescript - RequireJS如何将“tippy.js”映射到路径