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
awk
Aradu.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 列的值拆分为数组a1
和a2
(例如TA
,在第 4 列中将拆分为T
和A
,这些值将拆分为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