我有一個製表符分隔符。由若干行和列組成的文本文件。我想更改前兩列的內容,然後將修改後的文件寫入新文件。
之前發生變化,每行的前兩列是這個樣子: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];' –