У меня есть файл в этом формате:
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-й на числовой код!Я хочу заменить каждые 2 столбца на 1 кодовое число в соответствии с столбцом alleleA и alleleB.
, т. Е. , если буква в столбце 4-го и 5-го аналогична аллелю A (столбец 2), заменить 4-й и5-е на 0, если буква в столбце 4-й аналогична аллелю A (столбец 2), а буква в столбце 5-й аналогична аллелю B (столбец 3) или если буква в столбце 4-й похожа на аллель B (столбец 3) и буквув столбце 5 аналогичен аллелю A (столбец 2), затем замените столбцы 4 и 5 на 1, если буква в столбце 4 и 5 аналогична аллелю B (столбец 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 & B., что я не могу сделатьэто выбрать 2 столбца вместе, что-то вроде этого:
(i=4;i<=NF;i++) if (($i == $3) && ($i+1 == $2)) gsub ($i & $i+1 , 1)
Спасибо