perl脚本按照与另一个文件中列出的顺序对文件进行排序?

时间:2016-03-30 05:10:35

标签: regex perl perl-module

我想按照特定顺序对文件内容进行排序,然后在另一个文件中进行排序。例如,

输入文件1:

dff_0_1:G11

dff_0_5:N_25

dff_0:G10

dff_0_3:G13

dff_0_2:G12

输入文件2:

G13

G11

G12

G10

N_25

输出File1:

dff_0_3:G13

dff_0_1:G11

dff_0_2:G12

dff_0:G10

dff_0_5:N_25

这是我写的perl代码,但它没有按照我的意愿工作。

my @input_file2 = <IN2>;

chomp @input_File2;

while (<input_file1>) {

foreach my $i (0..$#input_File2){

print OUT43 if /(.+)\:\Q$input_File1[$i]\E/; 

}

}

close (IN33);

close (IN43);

close (OUT43);

2 个答案:

答案 0 :(得分:0)

您的代码中有很多错误。

  1. 您声明我的@input_ f ile2数组,但选择@input_ F ile2
  2. 您的while (<input_file1>) {&#39;&#34; input_file1&#34;文件句柄?
  3. 你预先$ #input_File2,但在正则表达式中使用$ input_File1。
  4. 你应该在file2的循环中循环file1
  5. 我编辑了一些代码:

                #!/usr/bin/perl
    
                open (IN33, "<1.txt") or die "can't open file 1.txt";
                open (IN43, "<2.txt") or die "can't open file 2.txt";
                open (OUT43, ">out.txt") or die "can't open file out.txt";
    
                my @input_file2 = <IN43>;
                my @input_file1 = <IN33>;
    
                chomp @input_file2;
    
    
                foreach my $i (@input_file2){
                foreach (@input_file1) {
    
                print OUT43 if /(.+)\:\Q$i\E/;
    
                }
    
                }
    
                close (IN33);
    
                close (IN43);
    
                close (OUT43);
    

答案 1 :(得分:0)

使用grep来执行此操作。 grep从数组中返回匹配的元素,然后构造用于存储grep输出的列表。使用select将print语句的内容写入新文件。

使用词法文件处理程序时,无需关闭文件

open my $fh1, "<", "one.txt";
open my $fh2 , "<","two.txt";
open my $wh, ">","output.txt";
my @data1 = <$fh1>;
select ($wh);

while (my $line = <$fh2>)
{
    chomp $line;
    my ($sort_data) = grep{/$line$/} @data1;
    print "$sort_data";
}