у меня есть этот вид входа:Заменить поля со значениями других полей в той же строке
rs10000004 C T 4 rs10000004 0 75625312 C C C C T 0 C T
rs10000005 G A 4 rs10000005 0 75625355 G 0 A A A G A A
я хочу заменить столбцы от 8 до конца от «А», если значение в столбце идентично 2-го поля $ 2 или «B», если значение идентично третьему полю $ 3. В противном случае, значение печатается как есть (нулевые значения, как ожидается, в некоторых колонках)
Ожидаемые результаты
rs10000004 C T 4 rs10000004 0 75625312 A A A A B 0 A B
rs10000005 G A 4 rs10000005 0 75625355 A 0 B B B A B B
Я попытался следующие, но это не дает мне никаких результатов только пустые строки. Улучшение моего кода для меня лучше, чем показать мне новое решение, используя нечто иное, чем AWK
cat input | awk '{ for(i=8; i<=NF; i++) { if($i == $2) $i="A"; else if($i == $3) $i="B"; else $i == 0; } print $i }'
Заранее спасибо
Измените цикл, чтобы начать с 'i = 8', и удалите оператор if. –
Да, сделано, спасибо. –
ОК, так что это работает, но я сделал ошибку, которую вы также можете иметь, которая после последнего else {$ i = 0} не $ i == 0 не так ли? – user1421408