多くの列と数値の行を含む巨大なファイルがあります。 6列目以降の列の値は、数値に欠けている部分NA
(または0
または)が加算された値です。1
2
NA
7列から始まるすべての列の値を次のように変更したいと思います。 0
に変更A A
、1
に変更A B
、2
に変更B B
、にNA
変更0 0
。これにより、列7から始まるタイトルが2回表示されます。を使ってこれを行うことはできますかawk
?私の入力ファイルは次のとおりですが、その後にはたくさんの列があります。私の出力ファイルはタブで区切る必要があります。
id1 id2 parental maternal sex phenotype A_101 A_102 A_103
20907153 20907153 0 0 -9 -9 1 0 0 0 0 0
31405729 31405729 0 0 -9 -9 0 0 0 0 0 0
31450731 31450731 0 0 -9 -9 0 0 0 2 0 0
41940308 41940308 0 0 -9 -9 0 0 0 NA 0 0
52428081 52428081 0 0 -9 -9 0 0 0 0 0 0
41943104 41943104 0 0 -9 -9 0 0 0 0 0 0
ベストアンサー1
少し長いですが簡単です。
awk '{ for (i=7; i<=NF; i++) { if ($i=="0"){ sub(0,"A A",$i) } else if ($i=="1"){ sub(1,"A B",$i) } else if ($i=="2") {sub(2,"B B",$i) } else if ($i=="NA") { sub("NA","0 0",$i) }} print $0}' inputfile.txt
フィールド番号が 7 より大きい場合は、各フィールドを繰り返し、基準の 1 つが満たされると、フィールドを対応するペアに置き換えます。ループの後に行全体を印刷します。
私にとって、これは次を返します。
id1 id2 parental maternal sex phenotype A_101 A_102 A_103
20907153 20907153 0 0 -9 -9 A B A A A A A A A A A A
31405729 31405729 0 0 -9 -9 A A A A A A A A A A A A
31450731 31450731 0 0 -9 -9 A A A A A A B B A A A A
41940308 41940308 0 0 -9 -9 A A A A A A 0 0 A A A A
52428081 52428081 0 0 -9 -9 A A A A A A A A A A A A
41943104 41943104 0 0 -9 -9 A A A A A A A A A A A A