同じサイズの2つのファイルを文字ごとに比較して、同じサイズの1/3を生成します。

同じサイズの2つのファイルを文字ごとに比較して、同じサイズの1/3を生成します。

同じ長さの2つの文字列のリストがあります。

例:

String A1: ATTCAGAATG
String A2: TGCCAGATAC

String B1: 0010011010
String B2: 0111010100

A1とB1、A2とB2などを文字ごとに比較し、B文字列の同じ位置に1がある場合は、A文字列の文字を修正したいと思います。文字列Bの文字が0の場合はそのままにしたいと思います。

A1とB1を比較した結果はでなければならずATxCAxxAxG、これを3番目のファイルに保存したいと思います。

サイズと長さが同じ2つのテキストファイルがあり、それぞれ1行にシーケンスが含まれています。プロセスが完了したら、2つのファイルをマージした同じサイズと長さの3番目のファイルが必要です。

これはワンタイムタスクなので、ハッキーなタスクを実行するためにbashまたは他のものを使用することになります。しかし、他のスクリプトや単純なCプログラムが状況を処理するより合理的な方法であれば、喜んでそうします。それ。

この問題を解決する最も簡単な方法の提案はありますか?

答え1

paste file1 file2 |\
awk '{
    len=length($1)
    for(char=1; char<=len; char++)
        printf (substr($0, char+len+1, 1)+0)? "x" : substr($0, char, 1)
    print ""
}'

答え2

~からこの回答到着別の問題

paste <(od -An -vtu1 -w1 fileA) <(od -An -vtu1 -w1 fileB) \
| awk 'NF!=2{exit}; {printf "%c", $2==49?120:$1}'

49はASCIIの10進値1、120はASCIIの10進値ですx

要件はリンクされた回答に記載されています。

プロセス置換をサポートするシェル(例:GNUシェル)、オプションをサポートするodシェル-w(例:GNUシェルod)、[...]

両方のファイルはバイト単位で完全に整列する必要があります。通常、「バイト単位」は要求された「文字単位」と同じではありませんが、、、、および改行文字Aを含むファイルには違いはありません。CGT01

関連情報