我有一个制表符分隔符。由若干行和列组成的文本文件。我想更改前两列的内容,然后将修改后的文件写入新文件。
之前发生变化,每行的前两列是这个样子:Perl - 用制表符分隔的文本文件拆分列并用新值替换列的问题
COLUMN1:
dip:DIP-41935N|refseq:NP_056092|uniprotkb:Q96PU5
COLUMN2: dip:DIP-48957N|uniprotkb:P49281
我希望他们只包含在每列末端的ID号,所以我想他们是如下:
COLUMN1: Q96PU5
COLUMN 2: P49281
我已经分开标签上的行来获取单个列。然后拆分前两列以获取所需的ID号($ prot_id)。然后,我尝试用ID代替第1列和第2列的内容。但是,更改后的文件中的输出与我预期的不同。它看起来像这样:
COLUMN1:
Q96PU5|refseq:NP_056092|uniprotkb:Q96PU5
COLUMN 2:
P49281|uniprotkb:P49281
只是列的第一部分已被替换。我一直在玩这个好几个小时,并且无法弄清楚我做错了什么。任何帮助不胜感激。 我的代码如下:
#!/usr/bin/perl
use warnings;
use strict;
my $file = 'DIP.txt';
open(INFILE, $file) or die "Can't open file: $!\n";
open(my $outfile, '>', 'DIP_changed.txt');
my @lines = <INFILE>;
foreach $_ (@lines) {
my @columns = split('\t', $_);
my $col1 = $columns[0];
my $col2 = $columns[1];
my @split_col1 = split ('uniprotkb:', $col1);
my @split_col2 = split ('uniprotkb:', $col2);
my $prot_id1 = $split_col1[length(@split_col1)];
my $prot_id2 = $split_col2[length(@split_col2)];
print $prot_id1, "\n";
s/$col1/$prot_id1/;
s/$col2/$prot_id2/;
print {$outfile} $_;
}
exit;
'my $ prot_id1 = $ split_col1 [length(@ split_col1)];'没有做你最想要的 - 可能是数组的最后一个索引。 'length'返回字符串中的字符数。要索引数组中的最后一个元素,只需使用'my $ prot_id1 = $ split_col1 [-1];' –