我有两个字符串列表,长度都相等。
例子:
String A1: ATTCAGAATG
String A2: TGCCAGATAC
String B1: 0010011010
String B2: 0111010100
我想逐个字符地比较 A1 与 B1、A2 与 B2 等,如果 B 字符串中的同一位置有 1,则修改 A 字符串中的字符。如果 B 字符串中的字符是 0,我想不管它。
比较 A1 和 B1 的结果应该是ATxCAxxAxG
,我想将其存储在第三个文件中。
有两个大小和长度相同的文本文件,每个文件在一行上包含一个序列。当该过程完成时,应该有第三个具有相同大小和长度的文件,这是两个文件的合并。
这是一项一次性工作,所以我愿意只使用 bash 或其他东西来做一些 hacky 的事情,尽管如果其他脚本或简单的 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的十进制值1
,120是ASCII的十进制值x
。
要求如链接答案中所示:
您需要一个支持进程替换的 shell(如 GNU shell)、一个
od
支持-w
选项的 shell(如 GNU shellod
)、[...]
两个文件必须逐字节完美对齐。一般来说,“逐字节”并不等于您请求的“逐字符”,但对于包含A
、C
、G
、T
、0
和1
换行符的文件没有区别。