私はこの種の入力を持っています:
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
列の値が 2 番目のフィールド $2 と同じ場合は 8 から最後までを "A" に置き換え、3 番目のフィールド $3 と同じ場合は "B" に置き換えます。それ以外の場合、値はそのまま出力されます (一部の列ではゼロ値が予期されます)。
期待される出力
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 }'
前もって感謝します