同じ長さの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
を含むファイルには違いはありません。C
G
T
0
1