在txt文件中一次处理一行,每个处理行打印一个文件,perl

时间:2016-02-23 17:41:01

标签: perl hash printing fasta

我能够生成包含以下内容的哈希:

// ==UserScript==
// @name     _YOUR_SCRIPT_NAME
// @match    http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant    GM_setClipboard
// ==/UserScript==

document.addEventListener ( "keydown", function (i) {
    var selectLink = $('a').eq (8); // The link by index
    var targetLink = selectLink.text ().trim (); // The link text

    if (i.keyCode === 106  &&  i.shiftKey) // Shift+Num*
    {
        GM_setClipboard (targetLink); // Copy to clipboard
    }
} );

我有一个包含以下内容的文本文件:

    AAAA => AAAAAAAA 
    TTTT => TTTTTTTT 
    GGGG => GGGGGGGG 
    CCCC => CCCCCCCC 

我希望能够打开文本文件,读取每一行,并搜索行的内容以匹配哈希中的键。如果有匹配项,我想在文本文件中特定于该行的文件中打印相应的值。我跳到第一个文件的输出将是:

    AAAA    AAAA 
    GGGG 
    TTTT    TTTT    TTTT 
    CCCC    CCCC 

第二个文件的输出是:

    >AAAA 
    AAAAAAAA 
    >AAAA 
    AAAAAAAA 

我知道有办法实现这一目标,但我不知所措。任何帮助将非常感谢。谢谢!

到目前为止,这是我的代码。请注意,我设置为只写入一个文件,但我需要写入与前面提到的文本文件中的行数一样多的文件(数百到数千)。

    >GGGG 
    GGGGGGGG

因此,这使我可以一次访问每一行,但现在我只需要将行中的所有元素与哈希中的键匹配,并将值打印到文件中。

2 个答案:

答案 0 :(得分:0)

我会这样做:

  • 读入您的文件
  • 逐行循环播放文件
  • Split任何以空格分隔成数组的内容
  • 检查其中任何一个是否与您的哈希键匹配
  • 如果他们打印出哈希的键和值

这并没有告诉您如何将这些文件打印到自己的文件中,但它应该可以帮助您。也许这是另一个问题?

open my $infile, '<', 'in.txt' or die $!;

my %hash = (
    AAAA => 'AAAAAAAA', 
    TTTT => 'TTTTTTTT', 
    GGGG => 'GGGGGGGG', 
    CCCC => 'CCCCCCCC'
);

while(<$infile>){
    chomp;
    my @fields = split;
    if ($hash{$fields[0]}){
        foreach (@fields){
            print ">$fields[0]\n";
            print "$hash{$fields[0]}\n";
        }
        print "\n";
    }
}
>AAAA
AAAAAAAA
>AAAA
AAAAAAAA

>GGGG
GGGGGGGG

>TTTT
TTTTTTTT
>TTTT
TTTTTTTT
>TTTT
TTTTTTTT

>CCCC
CCCCCCCC
>CCCC
CCCCCCCC

答案 1 :(得分:0)

这似乎符合你的要求。

#!/usr/bin/perl

use strict;
use warnings;

my %convert = (
  AAAA => 'AAAAAAAA',
  TTTT => 'TTTTTTTT',
  GGGG => 'GGGGGGGG',
  CCCC => 'CCCCCCCC',
);

while (<>) {
  my @tokens = split;
  open my $out, '>', "line_$..out" or die $!;
  foreach my $token (@tokens) {
    if (exists $convert{$token}) {
      print $out ">$token\n$convert{$token}\n";
    }
  }
}

你运行它,传入输入文件的名称(我真的不喜欢不必要的硬编码文件名)。您可以通过编辑对open()

的调用轻松调整创建的输出文件的名称