私は2つのファイルを持っています:
(one.txt) は次のようになります。
>ENST001
(((....)))
(((...)))
>ENST002
(((((((.......))))))
((((...)))
私はあと10000個のENSTを持っています
(two.txt) は次のようになります。
>ENST001 110
>ENST002 59
残りのすべての ENST についても同様
基本的に、(one.txt) の ENST を (two.txt) の 2 つのフィールドの組み合わせに置き換えたいので、結果は次のようになります。
>ENST001_110
(((....)))
(((...)))
>ENST002_59
(((((((.......))))))
((((...)))
そのための matlab スクリプトを作成しましたが、(two.txt) のすべての行をループするため、完了するまでに 6 時間ほどかかるため、awk、sed、grep、さらには perl を使用すると、数分で結果を取得できると思います. これは私がmatlabでやったことです:
frf = fopen('one.txt', 'r');
frp = fopen('two.txt', 'r');
fw = fopen('result.txt', 'w');
while feof(frf) == 0
line = fgetl(frf);
first_char = line(1);
if strcmp(first_char, '>') == 1 % if the line in one.txt start by > it is the ID
id_fold = strrep(line, '>', ''); % Reomve the > symbol
frewind(frp) % Rewind two.txt file after each loop
while feof(frp) == 0
raw = fgetl(frp);
scan = textscan(raw, '%s%s');
id_pos = scan{1}{1};
pos = scan{2}{1};
if strcmp(id_fold, id_pos) == 1 % if both ids are the same
id_new = ['>', id_fold, '_', pos];
fprintf(fw, '%s\n', id_new);
end
end
else
fprintf(fw, '%s\n', line); % if the line doesn't start by > print it to results
end
終わり