数値を2つの値に再フォーマットします。 [閉じる]

数値を2つの値に再フォーマットします。 [閉じる]

多くの列と数値の行を含む巨大なファイルがあります。 6列目以降の列の値は、数値に欠けている部分NA (または0または)が加算された値です。12NA

7列から始まるすべての列の値を次のように変更したいと思います。 0に変更A A1に変更A B2に変更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

おすすめ記事