一種可能性是使用sed
創建從一個File2
-script sed
其隨後在File1
使用:
sed 's/^\(>contig-[0-9]*_[0-9]*\)_.*/s%^\1 %& %/' File2 > sed.script
sed -f sed.script File1 > File.Out
rm -f sed.script
對於樣品File2
,所述sed.script
將包含:
s%^>contig-100_23331 %>contig-100_23331_Cov:_30.9135 %
s%^>contig-100_23332 %>contig-100_23332_Cov:_125.591 %
s%^>contig-100_23333 %>contig-100_23333_Cov:_5.97537 %
對於樣品File1
,sed
處理的輸出將是:
>contig-100_23331_Cov:_30.9135 length_200 read_count_4043
TCAG...
>contig-100_23332_Cov:_125.591 length_200 read_count_4508
TTCA...
>contig-100_23333_Cov:_5.97537 length_200 read_count_184
TTCC...
某些版本的sed
可能在sed
腳本中存在23k行的問題。如果這對您而言是個問題,那麼您可以生成sed.script
,然後將其拆分(split
)爲更小的塊(例如每個1000行),然後針對每個塊運行sed -f chunk
。這是痛苦的,但必要的。從歷史上看,HP-UX(舊版本,如HP-UX 9或10)的版本相當有限,sed
只能處理sed
腳本中的幾百個命令。
假設你使用bash
,可以避開明確中間文件,process substitution:
sed -f <(sed 's/^\(>contig-[0-9]*_[0-9]*\)_.*/s%^\1 %& %/' File2) File1 > File.Out
但是,你應該使用符號之前驗證腳本。
歡迎來到Stack Overflow。請儘快閱讀[常見問題]。大概在File2中有多少行(幾十或幾百,幾千,幾百萬)?據推測,其目的是用'contig-100_23331_Cov:_30.9135'等替換'contig-100_23331'等。 –
File2有23335行。 – Ramirous
事實上,我需要用contig-100_23331_Cov:_30.9135替換contig-100_23331,依此類推。 – Ramirous