0

私はこの種の入力を持っています:

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 }'

前もって感謝します

4

1 に答える 1