1 つの可能性は、 を使用して-scriptsed
を作成し、それを で使用することです。sed
File2
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
の 23k 行で問題が発生する場合があります。sed
それが問題になる場合は、 を生成し、それを小さなチャンク (たとえば、それぞれ 1000 行) にsed.script
分割してから、チャンクごとに実行できます。それは痛いですが、必要です。歴史的に、HP-UX (HP-UX 9 や 10 などの古いバージョン) は、スクリプト内で数百のコマンドしか処理できないかなり制限されたバージョンを持っていました。split
sed -f chunk
sed
sed
を使用していることを考えると、プロセス置換bash
を使用して明示的な中間ファイルを回避できます。
sed -f <(sed 's/^\(>contig-[0-9]*_[0-9]*\)_.*/s%^\1 %& %/' File2) File1 > File.Out
ただし、その表記法を使用する前に、スクリプトを検証する必要があります。