我有一个这种格式的文件:
probeset_id alleleA alleleB 562_201 562_201 562_202 562_202 562_203 562_203 562_204 562_204 562_205 562_205 562_206 562_206 562_207 562_207 562_208 562_208 562_209 562_209 562_258 562_258
AX-76431849 T C T T C T T T T T C C C T T C T T T C C T
AX-76431844 A G A A G A A A A A G G G A A G A A A G G A
AX-76431845 T C T T C T T T T T C C C T T C T T T C C T
我想用数字代码替换第4列到第20列!我想根据alleleA和alleleB列将每2列替换为1个代码。
即如果第4和第5列中的字母与alleleA(第2列)相似,则将第4和第5个替换为0,如果第4列中的字母与alleleA(第2列)相似且第5列中的字母类似于alleleB(第3列),或者第4列中的字母与alleleB(第3列)相似,第5列中的字母与alleleA(第2列)相似,则将第4列和第5列替换为1,如果第4列和第5列中的字母与alleleB(第3列)相似,则将第4和第5列替换为2 所以我想要的输出是:
probeset_id alleleA alleleB 562_201 562_201 562_202 562_202 562_203 562_203 562_204 562_204 562_205 562_205 562_206 562_206 562_207 562_207 562_208 562_208 562_209 562_209 562_258 562_258
AX-76431849 T C 0 1 0 0 2 1 1 0 1 1
AX-76431844 A G 0 1 0 0 2 1 1 0 1 1
AX-76431845 T C 0 1 0 0 2 1 1 0 1 1
我有这段代码:
awk 'NR == 1 { print; next } NR>1 {for (i=4;i<=NF;i++) if ( $i == $2) gsub ($i, 1 );for (i=4;i<=NF;i++) if ( $i == $3) gsub ($i, 2 );print}' input_test.txt > output_test.txt
但这只是根据Allele A&amp; A替换每一列。 B.我无法做的是一起选择2列,如下所示:
(i=4;i<=NF;i++) if (($i == $3) && ($i+1 == $2)) gsub ($i & $i+1 , 1)
由于
答案 0 :(得分:1)
awk '
NR==1{
print
next
}
{
for(i=4;i<=NF;i+=2)
{
if($i!=$(i+1))
$i=1
else if($i==$2)
$i=0
else
$i=2
$(i+1)=""
}
print
}' input.txt
答案 1 :(得分:1)
一种方式:
script.awk
的内容:
FNR == 1 {
print
next
}
FNR > 1 {
for ( i = 4; i <= NF; i += 2 ) {
if ( $i == $2 && $(i+1) == $2 ) {
value = 0
} else if ( $i == $3 && $(i+1) == $3 ) {
value = 2
} else {
value = 1
}
$i = ""
$(i+1) = value
}
print
}
infile
的内容:
probeset_id alleleA alleleB 562_201 562_201 562_202 562_202 562_203 562_203 562_204 562_204 562_205 562_205 562_206 562_206 562_207 562_207 562_208 562_208 562_209 562_209 562_258 562_258
AX-76431849 T C T T C T T T T T C C C T T C T T T C C T
AX-76431844 A G A A G A A A A A G G G A A G A A A G G A
AX-76431845 T C T T C T T T T T C C C T T C T T T C C T
像以下一样运行:
awk -f script.awk infile
结果:
probeset_id alleleA alleleB 562_201 562_201 562_202 562_202 562_203 562_203 562_204 562_204 562_205 562_205 562_206 562_206 562_207 562_207 562_208 562_208 562_209 562_209 562_258 562_258
AX-76431849 T C 0 1 0 0 2 1 1 0 1 1
AX-76431844 A G 0 1 0 0 2 1 1 0 1 1
AX-76431845 T C 0 1 0 0 2 1 1 0 1 1