如果第 4 列和第 5 列的第一个 nuc 不同,则输出为第一个 field_second 字段;如果第 4 列和第 5 列的第二个核苷酸不同,则输出为第一个 field_third 字段

如果第 4 列和第 5 列的第一个 nuc 不同,则输出为第一个 field_second 字段;如果第 4 列和第 5 列的第二个核苷酸不同,则输出为第一个 field_third 字段
Aradu.A03       9514    9527    CC      TC
Aradu.A03       15236   15265   CC      CT
Aradu.A03       36585   36621   TG      TA
Aradu.A03       36621   36666   GA      AA
Aradu.A03       42976   42981   CT      TC
Aradu.A03       63785   63843   GG      GT
Aradu.A03       63843   63852   GG      TG
Aradu.A03       79931   79958   CC      AC
Aradu.A03       102072  102077  GT      GC
Aradu.A03       102077  102085  TC      CA
Aradu.A03       102087  102095  CG      TG
Aradu.A03       102097  102106  CA      TA
Aradu.A03       102111  102115  TC      TT

awkAradu.A03_val如果第 4 列和第 5 列中的第一个核苷酸彼此不同,则 脚本将在第二列中获取输出; Aradu.A03_val如果第 4 列和第 5 列中的第二个核苷酸彼此不同,则在第三列中获取输出

答案1

$ awk '{ split($4, a1, ""); split($5, a2, ""); for (i in a1) { if (a1[i] != a2[i]) print $1 "_" $(i+1) }}' file
Aradu.A03_9514
Aradu.A03_15265
Aradu.A03_36621
Aradu.A03_36621
Aradu.A03_42981
Aradu.A03_42976
Aradu.A03_63843
Aradu.A03_63843
Aradu.A03_79931
Aradu.A03_102077
Aradu.A03_102085
Aradu.A03_102077
Aradu.A03_102087
Aradu.A03_102097
Aradu.A03_102115

awk脚本将第 4 列和第 5 列的值拆分为数组a1a2(例如TA,在第 4 列中将拆分为TA,这些值将拆分为a1),然后对它们进行成对测试。当两个数组之间的值不同时,将使用下划线打印第一列中的字符串以及第 2 列或第 3 列中的相应值。

如果两个核苷酸不同,则会产生两行输出。

答案2

awk解决方案:

awk '{ r=$1"_"; if (substr($4,1,1) != substr($5,1,1)) print r$2; 
       else if (substr($4,2,1) != substr($5,2,1)) print r$3 }' file

输出:

Aradu.A03_9514
Aradu.A03_15265
Aradu.A03_36621
Aradu.A03_36621
Aradu.A03_42976
Aradu.A03_63843
Aradu.A03_63843
Aradu.A03_79931
Aradu.A03_102077
Aradu.A03_102077
Aradu.A03_102087
Aradu.A03_102097
Aradu.A03_102115

相关内容