从多个文件复制数据并添加到不同的文件

时间:2011-11-11 07:35:40

标签: linux perl file

好吧,我不确定这是否可能。我可能听起来随机...... 大约有250个文件,名称为 例如:1

1_0.pdb,1_60.pdb,1_240.pdb,....50_0.pdb,50_60.pdb,50_240.pdb.....有一些数据。

现在对于上述每个文件都有另一个同名文件....只添加了前缀文件...赞: E.g:2

file1_0.pdb,file1_60.pdb,file1_240.pdb,....file50_0.pdb,file50_60.pdb,file50_240.pdb.....再次提供一些数据。

是否有可能的代码可以从第一个示例中复制每个文件中的数据并将其粘贴到example2中的相应文件中?比如从1_0.pdb到file1_0.pdb ...我希望iam不是随机而且更清晰......

3 个答案:

答案 0 :(得分:3)

使用perl,您可以执行类似

的操作
#!/usr/bin/perl -w

use strict;

my @filenames = qw(1_0.pdb 1_60.pdb 1_240.pdb);

for my $filename (@filenames) {

    open(my $fr, '<', $filename) or next;
    open(my $fw, '>>', "file$filename") or next;

    local($/) = undef;
    my $content = <$fr>;

    print $fw $content;

    close $fr;
    close $fw;
}

修改

而不是列出

中的所有电影名称
my @filenames = qw(1_0.pdb 1_60.pdb 1_240.pdb);
你可以做点什么

my @filenames = grep {/^\d+_\d+/} glob "*.pdb";

答案 1 :(得分:1)

尝试使用此代码:

use strict;
use warnings;

foreach my $file (glob "*.pdb") {
  next if ($file =~ /^file/);

  local $/ = undef;
  my $newfile = "file$file";

  open(my $fh1, "<", $file) or die "Could not open $file: " . $!;
  open(my $fh2, ">>", $newfile) or die "Could not open $newfile: " . $!;

  my $contents = <$fh1>;

  print $fh2 $contents;

  close($fh1);
  close($fh2);
}

如果您要覆盖文件内容而不是附加内容,请在第二个">>"语句中将">"更改为open

答案 2 :(得分:0)

此shell脚本也可以使用

foreach my_orig_file ( `ls *.pdb | grep -v ^file` )
set my_new_file = "file$my_orig_file"
cat $my_orig_file >> $my_new_file
end