Я хотел бы добавить уникальный заголовок одной строки, относящийся к каждому файлу FOCUS * .tsv-файла в указанном каталоге. После этого я хотел бы объединить все эти файлы в один файл.Добавление пользовательского заголовка в определенные файлы в каталоге
Сначала я пробовал команду sed
.
`my $cmd9 = `sed -i '1i$SampleID[4]' $tsv_file`;` print $cmd9;
Похоже, он работал, но после того, как я объединил все эти файлы в один файл в следующем разделе кода, вставленная строка была перечислена в четыре раза для каждого файла.
Я пробовал использовать следующий скрипт Perl, но он удалил содержимое файла и только распечатывает добавленный заголовок.
Я ищу самый простой способ выполнить то, что я ищу. Вот что я пробовал.
#!perl
use strict;
use warnings;
use Tie::File;
my $home="/data/";
my $tsv_directory = $home."test_all_runs/".$ARGV[0];
my $tsvfiles = $home."test_all_runs/".$ARGV[0]."/tsv_files.txt";
my @run_directory =(); @run_directory = split /\//, $tsv_directory; print "The run directory is #############".$run_directory[3]."\n";
my $cmd = `ls $tsv_directory/FOCUS*\.tsv > $tsvfiles`; #print "$cmd";
my $cmda = "ls $tsv_directory/FOCUS*\.tsv > $tsvfiles"; #print "$cmda";
my @tsvfiles =();
#this code opens the vcf_files.txt file and passes each line into an array for indidivudal manipulation
open(TXT2, "$tsvfiles");
while (<TXT2>){
push (@tsvfiles, $_);
}
close(TXT2);
foreach (@tsvfiles){
chop($_);
}
#this loop works fine
for my $tsv_file (@tsvfiles){
open my $in, '>', $tsv_file or die "Can't write new file: $!";
open my $out, '>', "$tsv_file.new" or die "Can't write new file: $!";
$tsv_file =~ m|([^/]+)-oncomine.tsv$| or die "Can't extract Sample ID";
my $sample_id = $1;
#print "The sample ID is ############## $sample_id\n";
my $headerline = $run_directory[3]."/".$sample_id;
print $out $headerline;
while(<$in>) {
print $out $_;
}
close $out;
close $in;
unlink($tsv_file);
rename("$tsv_file.new", $tsv_file);
}
Спасибо
(1) Является ли этот код именно тем, чем вы управляете? Вы открываете файл '$ in' с'> ', поэтому для записи. Должно быть '<' для чтения. В противном случае код, который вы показываете, действительно должен содержать строку. (2) Как вы хотите «_combine_» эти файлы? // Есть и другие вещи, которые можно улучшить. – zdim
Я изменил '$ in на' $ in, '<', 'и это сработало. Однако, когда я запускал код, который объединяет файлы, каждая строка заголовка появляется четыре раза. (2) Я объединяю определенные строки и столбцы из каждого файла. Каждый файл имеет точно такой же формат, поэтому я просматриваю массив файлов и добавляю один за другим. Без добавленных заголовков он отлично работает. спасибо – user3781528
Например, я исключаю строки с CNV | intronic | synonymous | utr_3 | utr_5 и интересуюсь только конкретными столбцами, которые я изменяю до добавления к окончательному файлу. – user3781528